アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。

サポートが終わってしまったVC++6.0で開発した案件の改造を行っています。OSはWindowsXPです。
その中で、time_t(32ビット)をインタフェースとするライブラリを使う必要が要件上あるのですが、その元になる日時情報が、世界各地のログ情報の中の日時情報で、その形式が各地のタイムゾーンによる文字列("2012/03/21 12:34:56")になっていています。各ログがどのタイムゾーンかは分かるので、TzSpecificLocalTimeToSystemTime関数を使えばUTCのSYSTEMTIME構造体には変換できそうなのですが(マニュアルを見ただけで試してはいません)、それをtime_tに変換する方法が分からず、困っています(mktimeなどは変換元をローカルタイムとして扱うため)。自分で計算するライブラリでも結構ですので、何か良い変換方法がありましたら、ぜひご教授頂きたいのですが。
またVC++6.0なので、.NET Frameworkを使わない方法での対応で考えております。

よろしくお願い致します。

A 回答 (2件)

SYSTEMTIME が得られるなら、そこから SystemTimeToFileTime で、


FILETIME=1601 年から 100 ナノ秒単位の時間が得られます。

FILETIME値から time_tの起点である「1970年1月1日0時0分0秒のFILETIME値」=「116444736000000000」を引いて、
10000000(1秒と100ナノ秒の比)で割れば、エポック秒に変換できます。
(あるいは、10000000で割ってから、11644473600を引いてもいいでしょう)

変換方向は逆ですが、上記定数の根拠については
http://support.microsoft.com/kb/167296/ja
が参考になるでしょうか。
    • good
    • 0
この回答へのお礼

素晴らしいご回答、誠にありがとうございます!
この方法でチャレン時してみようと思います。
とても助かりました。

蛇足ですが、今まで漠然とCTimeで取れると思い込んでいた反省から、msdnの日本語サイトのSystemTimeToFileTimeにUTCと書かれていないので、これが本当にUTCなのかちょっと疑ってたのですが、
http://msdn.microsoft.com/en-us/library/windows/ …
こちらに明記されていました。

お礼日時:2012/03/21 20:37

ローカルなタイムゾーンとして変換した後で補正するというのはできそうだけど.

    • good
    • 0
この回答へのお礼

ご回答誠にありがとうございます!

私もローカルタイム情報を取得し、一旦各国のデータを仮にローカルタイムとして(例えばmktimeで)time_tに変換した後、自分のローカルタイムとの差分を出して計算してみてはどうかとも思っていたのですが、GetTimeZoneInformationの使い方がなかなか理解出来ずにおります。時間があったらそちらの方法もトライしてみようと思っています。

http://msdn.microsoft.com/en-us/library/windows/ …

お礼日時:2012/03/21 22:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!