同步实际时间(java,c)

同步实际时间(java,c),java,c,winapi,time,synchronization,Java,C,Winapi,Time,Synchronization,我正在做简单的游戏(只是为了好玩)。 我在c中有服务器,在java中有客户端 我想在服务器和客户端上获得实际时间,但我不能得到相同的结果时间 在我使用的服务器上: // the system time SYSTEMTIME systemTime; GetSystemTime(&systemTime); // the current file time FILETIME fileTime; SystemTimeToFileTime(&systemTime, &fileTi

我正在做简单的游戏(只是为了好玩)。 我在
c
中有服务器,在
java
中有客户端

我想在
服务器
客户端
上获得实际时间,但我不能得到相同的结果时间

在我使用的服务器上:

// 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;
我正在获取格式(输出):

为什么??问题在哪里?我怎样才能得到同样的时间


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

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

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

Java

包装堆垛溢出

import java.util.Date;

public class Main {

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

}
输出:
143620048

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;
}
#包括
#包括
#包括
#包括
内部主(空){
结构时间值电视;
gettimeofday(&tv,NULL);
printf(“%ld\n”,tv.tv\u sec);
返回0;
}

输出:
1436200418

Java版本是正确的。“unix windows时代”的神奇数字是从哪里来的?@AlanStokes Stokes我在Internet上找到了这段代码这是第一个真正的C示例?如果是的话,它一定很重。。。C标准库中没有为实例定义
FILETIME
,在第一种情况下如何打印结果?计算看起来还可以,但是打印一个ULONGLONG需要一些注意。@fge这不是(严格符合)标准C;这是Windows API代码,Windows API实现了一个名为的类型。
import java.util.Date;

public class Main {

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

}
#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;
}