Получить фактическое время (Java, C) синхронизированы

1

Я работаю над легкой игрой (просто для удовольствия). У меня есть сервер в 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

Зачем? В чем проблема? Как я могу получить одно и то же время?

Обе программы работают на одном компьютере (выигрыш 8.1)

  • 0
    Java один прав. Где вы взяли магический номер для "эпохи Unix Windows"?
  • 0
    @AlanStokes Stokes я нашел этот код в интернете
Показать ещё 4 комментария
Теги:
winapi
time
synchronization

1 ответ

1

Прежде всего. Первый блок кода вообще не является стандартным кодом C, или, скорее, вы используете некоторые библиотеки, которые я просто не знаю.

Нет простого способа получить фактическое время с точностью менее секунды в стандарте C. Но вот пример с Java и C, который действительно работает, поэтому я надеюсь, что это поможет.

Ява

пакет 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

С

#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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню