C ++(MSVS)のエポックからのローカル現在時刻を秒単位で取得するにはどうすればよいですか?

マイク・シオムキン

エポックからの秒単位のローカル(タイムゾーンオフセットあり)の現在時刻が必要です。次のコードは、不要な中間一時構造tm作成するため、少し不器用に見えます。なぜ私が取得する必要がないのtime_tに変換後、TMに戻すためにtime_tのもっと良い方法はありますか?

time_t ct = time(0);
tm lct = tm();
localtime_s(&lct, &ct);
ct = _mkgmtime(&lct);
スティーブサミット

ポータブルCで現地時間を(タイムゾーンとDSTを適用して)取得したい場合は、はい、通常は2段階の手順です。エポックからの時間から始めて、最初に呼び出してlocaltimeから、結果の内訳struct tm(通常、次に行うのは電話strftimeです。)

を呼び出しctimeて、現地時間の文字列を直接取得することもできます。

さまざまな関数呼び出しが含まれる理由は、残念ながら、いくつかの異なる時間形式が使用されているためです。(その理由は、日付と時刻が複雑であるためです!)1970年以降、時間を秒で表すことができます。として表すことができstruct tmます。文字列として表すことができます(数十億の形式の1つ)。UnixおよびLinuxでは、struct timevalまたはとして表すことができますstruct timespec

しかし、あなたが発見したように、簡単で標準的な方法がないことの1つは、1970年以降の現地時間を秒単位で取得することです。しかし、その理由は、それがあまり有用な表現ではないためです。一般に、日付/時刻の値を使用して実行する可能性のある2つのことがあります。(1)計算を実行するか、(2)ユーザーに表示します。ユーザーに表示したい場合は、おそらく現地時間で表示したいので、人間が読める形式で任意の形式で現地時間に変換する方法はたくさんあります。(私が言ったように、通常の方法は、を呼び出すことですlocaltime、そしてstrftime。)しかし、計算を実行したい場合、実際にそれらを実行する唯一の方法は、UTCで1970年以降の秒を使用することです。これにより、他のすべての厄介な問題が解消されます。月には何日ありますか?うるう年ですか?私たちはどのタイムゾーンにいますか?夏時間は有効ですか?

ただし、1970年以降、現地時間を秒で表現しようとすると、おそらく気が狂います。たとえば、現在、時刻は1460383736で、これは14:08:56UTCです。私が座っている場所は、10:08:56 EDT(米国東部時間、DSTが有効)です。つまり、現地時間の1970年から1460369336秒だと言え​​るでしょう。しかし、私が座っている場所でも、1460369336秒前は1970年1月1日の深夜ではありませんでした。実際には1969年12月31日の午後11時でした。1時間ずれています。その理由は、DSTが有効になっていないためです。 1970年1月1日。

つまり、この「1970年以降の秒数を現地時間として」の値を計算することは可能ですが、それは奇妙なことであり、そうなる可能性が高いため、現地時間の処理方法を再考することをお勧めします。より単純なスキームを使用した場合よりも回避するのがはるかに難しいさまざまな問題が発生します。


あなたが本当にしたい場合はしかし、ここであなたが呼び出すことなく、UTCおよび現地時間の間のオフセットを決定することができるかもしれない2つの方法がありgmtimeかは_mkgmtime

  1. に電話localtimeして、tm_gmtoffフィールドを見てください(残念ながら、このフィールドは非標準であり、すべてのシステムに存在するわけではありません。)
  2. 廃止されたftime関数を呼び出して、のtimezoneフィールドを確認しstruct timebます。(ここにいくつかの落とし穴があります:ftime時代遅れで非標準であるだけでなく、timezoneフィールドは数分であり、グリニッジの西のゾーンでは正ですtm_gmtoffが、負です。)

しかし、とにかく、それらは多かれ少なかれ直接、UTCの1970年以降の秒数を加算または減算して「ローカル」の1970年以降の秒数を取得する数値を提供します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

d / m / y形式のCで現在の時刻を取得するにはどうすればよいですか?

分類Dev

住所に基づいて現在の時刻を取得するにはどうすればよいですか?c#

分類Dev

クロスプラットフォームのC ++ 32ビットシステムでミリ秒単位の時差を取得するにはどうすればよいですか?

分類Dev

C ++でシステムの稼働時間をミリ秒単位で取得するにはどうすればよいですか?

分類Dev

UnityのC#の場合、半径が毎秒0.1単位縮小するボールを作成するにはどうすればよいですか?

分類Dev

C ++のcatch(...)ブロックからエラーメッセージを取得するにはどうすればよいですか?

分類Dev

C関数/エクステンションから現在のデータベース名を取得するにはどうすればよいですか?

分類Dev

C ++の16進カラー値からOpenCVHSV値を取得するにはどうすればよいですか?

分類Dev

C ++で現在の日時を取得するにはどうすればよいですか?

分類Dev

C ++で現在の日時を取得するにはどうすればよいですか?

分類Dev

C ++で現在の日時を取得するにはどうすればよいですか?

分類Dev

c#Linq:1つのテーブルから2つのカウントクエリをマージするにはどうすればよいですか?

分類Dev

動的テーブルで現在の行インデックスを取得するにはどうすればよいですか?C#/ ASP.NET MVC

分類Dev

Cのスタックポインタからリターンアドレスを取得するにはどうすればよいですか?

分類Dev

C#のイベントログからラップトップの起動時間を取得するにはどうすればよいですか?

分類Dev

Cでローカルシェル変数を取得するにはどうすればよいですか?

分類Dev

C ++で1つの関数のすべてのオーバーロードを「エクスポート」するにはどうすればよいですか?

分類Dev

C#WPF-テキストボックスから常に現在のテキストを取得するにはどうすればよいですか?

分類Dev

C#で現在のユーザーのデスクトップへのパスを取得するにはどうすればよいですか?

分類Dev

C#で現在のユーザーのデスクトップへのパスを取得するにはどうすればよいですか?

分類Dev

C#で現在のユーザーのデスクトップへのパスを取得するにはどうすればよいですか?

分類Dev

C#でkryptontabcontrolのバックカラーを変更するにはどうすればよいですか?

分類Dev

C#でマイクのフルネームを取得するにはどうすればよいですか?

分類Dev

C#Excel相互運用機能:セルの高さと幅をピクセル単位で設定するにはどうすればよいですか?

分類Dev

cプログラムの実行時間を取得するにはどうすればよいですか?

分類Dev

C ++でコードの実行時間を取得するにはどうすればよいですか?

分類Dev

C ++からQMLプロパティの値を取得するにはどうすればよいですか?

分類Dev

C#で特定の国から国コードを取得するにはどうすればよいですか?

分類Dev

別のc#プロジェクトからNinjectカーネルにアクセスするにはどうすればよいですか?

Related 関連記事

  1. 1

    d / m / y形式のCで現在の時刻を取得するにはどうすればよいですか?

  2. 2

    住所に基づいて現在の時刻を取得するにはどうすればよいですか?c#

  3. 3

    クロスプラットフォームのC ++ 32ビットシステムでミリ秒単位の時差を取得するにはどうすればよいですか?

  4. 4

    C ++でシステムの稼働時間をミリ秒単位で取得するにはどうすればよいですか?

  5. 5

    UnityのC#の場合、半径が毎秒0.1単位縮小するボールを作成するにはどうすればよいですか?

  6. 6

    C ++のcatch(...)ブロックからエラーメッセージを取得するにはどうすればよいですか?

  7. 7

    C関数/エクステンションから現在のデータベース名を取得するにはどうすればよいですか?

  8. 8

    C ++の16進カラー値からOpenCVHSV値を取得するにはどうすればよいですか?

  9. 9

    C ++で現在の日時を取得するにはどうすればよいですか?

  10. 10

    C ++で現在の日時を取得するにはどうすればよいですか?

  11. 11

    C ++で現在の日時を取得するにはどうすればよいですか?

  12. 12

    c#Linq:1つのテーブルから2つのカウントクエリをマージするにはどうすればよいですか?

  13. 13

    動的テーブルで現在の行インデックスを取得するにはどうすればよいですか?C#/ ASP.NET MVC

  14. 14

    Cのスタックポインタからリターンアドレスを取得するにはどうすればよいですか?

  15. 15

    C#のイベントログからラップトップの起動時間を取得するにはどうすればよいですか?

  16. 16

    Cでローカルシェル変数を取得するにはどうすればよいですか?

  17. 17

    C ++で1つの関数のすべてのオーバーロードを「エクスポート」するにはどうすればよいですか?

  18. 18

    C#WPF-テキストボックスから常に現在のテキストを取得するにはどうすればよいですか?

  19. 19

    C#で現在のユーザーのデスクトップへのパスを取得するにはどうすればよいですか?

  20. 20

    C#で現在のユーザーのデスクトップへのパスを取得するにはどうすればよいですか?

  21. 21

    C#で現在のユーザーのデスクトップへのパスを取得するにはどうすればよいですか?

  22. 22

    C#でkryptontabcontrolのバックカラーを変更するにはどうすればよいですか?

  23. 23

    C#でマイクのフルネームを取得するにはどうすればよいですか?

  24. 24

    C#Excel相互運用機能:セルの高さと幅をピクセル単位で設定するにはどうすればよいですか?

  25. 25

    cプログラムの実行時間を取得するにはどうすればよいですか?

  26. 26

    C ++でコードの実行時間を取得するにはどうすればよいですか?

  27. 27

    C ++からQMLプロパティの値を取得するにはどうすればよいですか?

  28. 28

    C#で特定の国から国コードを取得するにはどうすればよいですか?

  29. 29

    別のc#プロジェクトからNinjectカーネルにアクセスするにはどうすればよいですか?

ホットタグ

アーカイブ