同步实际时间(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;
}