1

UTC タイムスタンプを $push コマンド (以下) に直接挿入しようとしています。現在「UTC TIME HERE PLEASE」と表示されている場所で UTC 文字列を取得したいと思います。

update = BCON_NEW ("$push", 
      "{", 
        "folder.0.files", 
            "{", 
                "file",     BCON_UTF8 (file_id), 
                "modified", BCON_UTF8 ("UTC TIME HERE PLEASE"), 
            "}", 
    "}");

別の方法、ここでは機能しません

コマンドのリストに UTC 文字列を追加する方法は知っていますが (以下を参照)、その構造は、私が実行しようとしている $push のコンテキストでは機能しません。

update = bson_new ();
bson_append_now_utc(update, "time", -1);
mongoc_collection_update (collection, MONGOC_UPDATE_NONE, query, update, NULL, &error);

助言がありますか?

ありがとう


アップデート

Totonga のおかげで、コードを次のように調整しました。

// Current time
long            ms; // Milliseconds
time_t          s;  // Seconds
struct timespec spec;

clock_gettime(CLOCK_REALTIME, &spec);

s  = spec.tv_sec;
ms = round(spec.tv_nsec / 1.0e6); // Convert nanoseconds to milliseconds

// Update Mongo
update = BCON_NEW ("$push", 
    "{", 
        "folder.0.files", 
            "{", 
                "file",     BCON_UTF8 (file_id),
                "modified", BCON_DATE_TIME (ms), 
            "}", 
    "}");

これにより、Mongo で ISODate が得られますが、間違った日付値が表示されます。

"modified" : ISODate("1970-01-01T00:00:00.913+0000")


作業コード付きの最終更新この投稿 のコードと Totonga の提案を使用して、作業コードを取得することができました。

// Current time
struct timeval tv;
gettimeofday(&tv, NULL);
unsigned long long millisecondsSinceEpoch =
(unsigned long long)(tv.tv_sec) * 1000 +
(unsigned long long)(tv.tv_usec) / 1000;

// add new file
update = BCON_NEW ("$push", 
    "{", 
        "folder.0.files", 
            "{", 
                "file",     BCON_UTF8 (file_id), 
                "modified", BCON_DATE_TIME (millisecondsSinceEpoch), 
            "}", 
    "}");

mongoc_collection_update (collection, MONGOC_UPDATE_NONE, query, update, NULL, &error);
4

1 に答える 1