【问题标题】:Get actual time (java, c) synchronized获取实际时间(java,c)同步
【发布时间】:2014-12-20 15:40:57
【问题描述】:

我正在开发简单的游戏(只是为了好玩)。 我在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());

我开始格式(输出):

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


【解决方案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);
    }

}

输出: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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 2014-02-05
    • 2016-01-12
    相关资源
    最近更新 更多