
こんにちは。
サポートが終わってしまった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を使わない方法での対応で考えております。
よろしくお願い致します。
No.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
が参考になるでしょうか。
素晴らしいご回答、誠にありがとうございます!
この方法でチャレン時してみようと思います。
とても助かりました。
蛇足ですが、今まで漠然とCTimeで取れると思い込んでいた反省から、msdnの日本語サイトのSystemTimeToFileTimeにUTCと書かれていないので、これが本当にUTCなのかちょっと疑ってたのですが、
http://msdn.microsoft.com/en-us/library/windows/ …
こちらに明記されていました。
No.1
- 回答日時:
ローカルなタイムゾーンとして変換した後で補正するというのはできそうだけど.
ご回答誠にありがとうございます!
私もローカルタイム情報を取得し、一旦各国のデータを仮にローカルタイムとして(例えばmktimeで)time_tに変換した後、自分のローカルタイムとの差分を出して計算してみてはどうかとも思っていたのですが、GetTimeZoneInformationの使い方がなかなか理解出来ずにおります。時間があったらそちらの方法もトライしてみようと思っています。
http://msdn.microsoft.com/en-us/library/windows/ …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- 統計学 ダミー変数の因子分析について質問です 1 2022/03/27 14:31
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- ノートパソコン パソコンを修理に出し、マザーボードが交換された場合 8 2022/11/09 22:37
- Excel(エクセル) 図書カードの分配 7 2023/05/09 15:57
- 日本語 きみの嫁さんは私が見つけてあげるよ。 11 2022/11/13 21:01
- 政治 ガーシー並みに、辞任すると逮捕されるので高市早苗はゴネてるのですか? 4 2023/03/20 11:14
- デスクトップパソコン 「自動修復でPCを修復できませんでした」と表示されPCが起動しないのですが対処法はありますか? 5 2022/05/13 09:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETをJavaに変換するツール...
-
C++からCへのソース変換について
-
PHPで、日本語からアルファベッ...
-
VB6からVB2010への変換について
-
エクセルVBAの自動変換機能?
-
iconv_openで「II」(ギリシャ...
-
浮動小数点から文字列の変換の時に
-
UUENCODER
-
ユニコード文字の変換について
-
シフトJISのCSVファイルをUFT-8...
-
家電製品の電力周波数を変える機械
-
A/D変換のプログラム
-
NumericUpDownを使用してテキス...
-
VB.NETからJavaに変換するツー...
-
「変換不可」の正しい英語表現
-
【EXCEL】カナ、ひらがなを英字...
-
C/C++→JAVAに変換するツール
-
Mac 乗数の入力方法
-
なぜ通信には16進数文字列が使...
-
2自由度PID制御の伝達関数の逆変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
家電製品の電力周波数を変える機械
-
エクセルVBAの自動変換機能?
-
緯度、経度の 10進法と 60進法...
-
Mac 乗数の入力方法
-
C/C++→JAVAに変換するツール
-
なぜ通信には16進数文字列が使...
-
VB6からVB2010への変換について
-
10進数をBCDに変換する方法
-
画像ファイル変換(Tiff→PDF)
-
エクセルのvbaで検索ボタンを作る
-
分を時間に変換するプログラム
-
StrConvの使い方について教えて...
-
三角形を逆三角形にしたいです...
-
逆コンパイルと逆アセンブルの...
-
VB.NETをJavaに変換するツール...
-
UTF8→ShiftJISに変換したいです!
-
FortranをC++(VC++)へ変換
-
3のつく数字と3の倍数のみを表...
-
c++でmatからvectorへの変換の...
-
C#でのpngからbmpへの変換について
おすすめ情報