获取实际时间(java,c)同步

时间:2014-12-20 15:40:58

标签: java c winapi time synchronization

我正在开发简单的游戏(只是为了好玩)。 我的服务器位于c,客户端位于java

我想在serverclient上获得实际时间,但我无法达到相同的结果时间。

在我使用的服务器上:

// 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());

我是gettin格式(输出):

Calender - Time in milliseconds :1419089968022
Date() - Time in milliseconds: 1419089968022

为什么呢?问题出在哪儿?我怎么能得到相同的时间?

两个程序都在同一台PC上运行(win 8.1)

1 个答案:

答案 0 :(得分:1)

首先。第一段代码似乎根本不是标准的C代码,或者你使用的是一些我根本不知道的库。

没有简单的方法可以在标准C中以不到一秒的精度获得实际时间。但是这里是Java和C的实际工作示例,所以我希望这会有所帮助。

<强>爪哇

package stackOverflow;

import java.util.Date;

public class Main {

    public static void main(String[] args) {
        long lDateTime = new Date().getTime();
        System.out.println(lDateTime/1000);
    }

}

输出:1436200408

<强> C

#include<stdio.h>
#include<stdlib.h>
#include<sys/time.h>
#include<time.h>

int main(void) {
    struct timeval tv;

    gettimeofday(&tv, NULL);
    printf("%ld\n", tv.tv_sec);

    return 0;
}

输出:1436200418