タグ: 日時

  • [C++]今の日時を取得

    はじめに

     今の日付と時刻を知りたいとおもったことはありませんか。いくつか方法を記載します。
     ユーザー定義の変数名は日本語にしています。メリハリがあるとコードが読みやすいかなぁとおもったので。
     サンプルでは『using namespace std;』を省略していますので、コードを試すときはこの行をおぎなってください。

    経過秒』を time_t 形式で取得

     とりあえず time_t 形式にします。これは『1970/01/01 00:00:00 UTC からの経過秒』です。
     32ビットシステムでは 2038/01/19 03:14:07 まで表現できるそうです。もうすぐトラブルが発生しそうな予感がしますね。64ビットシステムへの移行が必要です。

    now()を使う方法

    #include <chrono>
    chrono::system_clock::time_point 日時 = chrono::system_clock::now();
    time_t 経過秒 = chrono::system_clock::to_time_t(日時);

    time(nullptr)を使う方法

    #include <chrono>
    time_t 経過秒 = time(nullptr);

     『nullptr』を使うことが推奨されているようですが、かわりに『NULL』や『0』を使うこともできます。

    構造体 tm 形式へ変換

     先ほど求めた経過秒(time_t)を今の日時 (struct tm) にします。今の日時といっても色々ありますが、協定世界時 (UTC,GMT) へ変換するものと、現地時間(ローカルタイム)へ変換するものを記載します。

    協定世界時へ

    struct tm 今の日時;
    gmtime_s(&今の日時, &経過秒);

    現地時間(日本時間)へ

    struct tm 今の日時;
    localtime_s(&今の日時, &経過秒);

    今の日時 (struct tm) を文字の日時 (char[])へ

     今の日時を文字として整形してみましょう。日付の文字列は国によって異なりますが、今回は日本の形式にします。
     ・日本 : //日
     ・イギリス : 日//
     ・アメリカ : /日/
     国によって日付の並び順が異なりますが、何だか話す順番に通じるものがあるような気がします。

    char型の『年/月/日 時:分:秒』へ

    char 文字の日時[128];
    strftime(文字の日時, 128, "%Y/%m/%d %H:%M:%S", &今の日時);

     char[128] では sizeof(char[128]) が128になります。strftime(文字の日時, sizeof(文字の日時), … としても大丈夫そうです。

    wchar_t型の『年/月/日 時:分:秒』へ

    wchar_t 文字の日時[128];
    wcsftime(文字の日時, 128, L"%Y/%m/%d %H:%M:%S", &今の日時);

     wchar_t[128] では sizeof(wchar_t[128]) が 256 になります。wcsftime(文字の日時, sizeof(文字の日時), … とはできませんね。

    さいごに

     コード全体を書いてみましょう。

    #include <chrono>
    using namespace std;
    time_t 経過秒 = time(nullptr);
    struct tm 今の日時;
    localtime_s(&今の日時, &経過秒);
    char 文字の日時[128];
    strftime(文字の日時, 128, "%Y/%m/%d %H:%M:%S", &今の日時);
    cout << "今は " << 文字の日時 << endl;
    
  • [言語比較]今の日時

    [言語比較]今の日時

     ほとんどの命令はコードを実行しているコンピュータの日時を返します

    Java

    import java.util.Calendar;
    Calendar 日時値 = Calendar.getInstance();

    Java Script

    日時 = New Date();

    Lotus Script

    Dim 日時値 As Variant
    日時値 = Now

    Lotus 式言語

     コードを実行しているコンピュータの日時の他に、サーバーの日時を取得する方法が用意されています

    日時値 = @Now
    Rem {実行環境の日時を取得}
    サーバーの日時値 = @Now([SERVERTIME]:[LOCALTIMEONERROR])
    Rem {サーバーの日時を得られないときはクライアントの日時を取得}

    C++

    #include <chrono>
    time_t 経過秒 = time(nullptr);

     くわしくはこちらの記事に記載しています↓

  • [言語比較]Format : 日時値を文字値へ変換

    [言語比較]Format : 日時値を文字値へ変換

    Lotus Script 言語

    • Format (日時)
    • Format (日時, 形式)

    日時の形式の例
    2020/11/29 = Format (Now, {Short Date})
     ※オペレーティングシステムで指定された日付形式になります
    14:51 = Format (Now, {Short Time})
     ※オペレーティングシステムで指定された時刻形式になります
    2020/11/29 14:51:06 = Format (Now, {yyyy/mm/dd hh:mm:ss})
    11/29 11:06 = Format (Now, {mm/dd mm:ss})
    02:51:06 PM = Format (Now, {hh:mm:ss AM/PM})
     ※月と時はどちらもmmで指定しますが、hhのあとのmmは時と解釈されます
     ※スラッシュ(/)とコロン(:)はオペレーティングシステムで指定された記号に変換されます
     ※AM/PMと記載するとhhは01~12になり、AMまたはPMが付加されます
     ※am/pmと小文字で記載すると、amまたはpmが付加されます
    2020/11/29 14:51:06 = Format (Now, {General Date})

    VbScript 言語

    • FormatDateTime (日時)
       ※色々とオプションを指定できます

    Lotus 式言語

    • @Text (日時);
    • @Text (日時; 形式);

    日時の形式の例
    2020/11/29 14:51:06 = @Text (@Now);
    2020/11/29 14:51:06 = @Text (@Now; {S2});
    2020/11/29 = @Text (@Now; {S0});
    14:51:06 = @Text (@Now; {S1});
    14:51 = @Text (@Now; {T1});