JavaのcurrentTimeMillisで取得した値はWin32APIのGetSystemTimeで取得した値を元にmktimeで算出した値と一致すると思っていたのですが、違うのでしょうか?
Java
1package test_currentTimeMillis; 2 3public class Main { 4 5 public static void main(String[] args) { 6 System.out.println("currentTimeMillis: "+System.currentTimeMillis()); 7 } 8 9} 10
C++
1#ifndef _WIN32_WINNT 2#define _WIN32_WINNT 0x0500 3#endif 4#ifndef OEMRESOURCE 5#define OEMRESOURCE 6#endif 7#ifndef STRICT 8#define STRICT 9#endif 10#include <windows.h> 11#include <ctime> 12#include <iostream> 13 14time_t make_time_t(const SYSTEMTIME & st) 15{ 16 tm time_data; 17 ZeroMemory(&time_data, sizeof(time_data)); 18 time_data.tm_year = st.wYear - 1900; 19 time_data.tm_mon = st.wMonth - 1; 20 time_data.tm_mday = st.wDay; 21 time_data.tm_hour = st.wHour; 22 time_data.tm_min = st.wMinute; 23 time_data.tm_sec = st.wSecond; 24 return mktime(&time_data); 25} 26 27unsigned long long time_to_ms(const SYSTEMTIME & systime) 28{ 29 time_t seconds = make_time_t(systime); 30 return seconds * 1000 + systime.wMilliseconds; 31} 32 33int main() 34{ 35 SYSTEMTIME time; 36 GetSystemTime(&time); 37 unsigned long long count = time_to_ms(time); 38 std::cout << count << std::endl; 39 40 return 0; 41}
この2つのプログラムを同時に起動して、値を確かめてみましたが
Java: 1454833348652
C++ : 1454800949464
という結果になり、32399188ミリ秒の差がありました。
32399188ミリ秒というのは約9時間です。
9時間と聞いてピンとくるのは「日本標準時 (JST) は協定世界時より9時間早い」という事実です。
JavaのcurrentTimeMillisは日本時間を返しているということなのでしょうか?
よろしくお願いいたします。
追伸:
解決しましたが解決したときのコードがきれいに貼れなかったのでここに貼っておきます。
C++
1#ifndef WIN32_LEAN_AND_MEAN 2#define WIN32_LEAN_AND_MEAN 3#endif 4#ifndef _WIN32_WINNT 5#define _WIN32_WINNT 0x0500 6#endif 7#ifndef OEMRESOURCE 8#define OEMRESOURCE 9#endif 10#ifndef STRICT 11#define STRICT 12#endif 13#include <windows.h> 14#include <ctime> 15#include <iostream> 16 17time_t make_time_t(const SYSTEMTIME & st) 18{ 19 tm time_data; 20 ZeroMemory(&time_data, sizeof(time_data)); 21 time_data.tm_year = st.wYear - 1900; 22 time_data.tm_mon = st.wMonth - 1; 23 time_data.tm_mday = st.wDay; 24 time_data.tm_hour = st.wHour; 25 time_data.tm_min = st.wMinute; 26 time_data.tm_sec = st.wSecond; 27 time_data.tm_isdst = 0; 28 return mktime(&time_data); 29} 30 31unsigned long long time_to_ms(const SYSTEMTIME & systime) 32{ 33 FILETIME file_time; 34 SystemTimeToFileTime(&systime, &file_time); 35 FILETIME local_ft; 36 FileTimeToLocalFileTime(&file_time, &local_ft); 37 SYSTEMTIME local_time; 38 FileTimeToSystemTime(&local_ft, &local_time); 39 time_t seconds = make_time_t(local_time); 40 return seconds * 1000 + systime.wMilliseconds; 41} 42 43int main() 44{ 45 SYSTEMTIME time; 46 GetSystemTime(&time); 47 std::cout << time.wYear << "year " << time.wMonth << "month " << time.wDay << "day " << time.wHour << "h " << time.wMinute << "min " << time.wSecond << "sec " << time.wMilliseconds << "ms" << std::endl; 48 unsigned long long count = time_to_ms(time); 49 std::cout << count << std::endl; 50 51 return 0; 52}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/07 11:44 編集