【发布时间】:2014-12-20 15:40:57
【问题描述】:
我正在开发简单的游戏(只是为了好玩)。
我在c 有服务器,在java 有客户端。
我想在server 和client 上获得实际时间,但我无法得出相同的结果时间。
在我正在使用的服务器上:
// the system time
SYSTEMTIME systemTime;
GetSystemTime(&systemTime);
// the current file time
FILETIME fileTime;
SystemTimeToFileTime(&systemTime, &fileTime);
// filetime in 100 nanosecond resolution
ULONGLONG fileTimeNano100;
fileTimeNano100 = (((ULONGLONG) fileTime.dwHighDateTime) << 32) + fileTime.dwLowDateTime;
//to milliseconds and unix windows epoche offset removed
ULONGLONG posixTime = fileTimeNano100 / 10000 - 11644473600000;
return posixTime;
我得到了格式(输出)的时间:1750721123
在我正在使用的客户端上
long lDateTime = new Date().getTime();
System.out.println("Date() - Time in milliseconds: " + lDateTime);
Calendar lCDateTime = Calendar.getInstance();
System.out.println("Calender - Time in milliseconds :" + lCDateTime.getTimeInMillis());
我开始格式(输出):
Calender - Time in milliseconds :1419089968022
Date() - Time in milliseconds: 1419089968022
为什么?哪里有问题?我怎样才能获得相同的 TIME?
两个程序在同一台电脑上运行(win 8.1)
【问题讨论】:
-
Java 是对的。你从哪里得到“unix windows epoch”的神奇数字?
-
@AlanStokes Stokes 我在网上找到了这段代码
-
第一个例子真的是C吗?如果是,那么它一定是宏很重......例如,C 标准库中没有定义
FILETIME -
第一种情况下如何打印结果?计算看起来没问题,但打印 ULONGLONG 需要小心。
-
@fge 这不是(严格符合)标准 C;这是 Windows API 代码,Windows API 实现了一个名为
FILETIME的类型。
标签: java c winapi time synchronization