Как перевести год, месяц, день в правильные UTC миллисекунды эпохи? - PullRequest
2 голосов
/ 20 ноября 2011

Я пытаюсь преобразовать дату в миллисекунды с помощью следующего кода:

    GregorianCalendar gc = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
    gc.clear();
    gc.set(1900, 1, 1);

    long left = gc.getTimeInMillis();

Я получаю left=-2206310400000, но когда я проверяю здесь , я должен получить -2208988800000.

Что я делаю не так?

1 Ответ

3 голосов
/ 20 ноября 2011

Вы используете 1 для номера месяца, что означает февраль.

Вы имеете в виду

gc.set(1900, 0, 1);

С документы :

month - значение, используемое для установки поля календаря MONTH.Значение месяца основано на 0.например, 0 для января.

Да, API даты / времени Java не работает.Если вы выполняете какой-либо значительный объем работы по датам / временам, я бы посоветовал вам использовать Joda Time .

long left = new DateTime(1900, 1, 1, 0, 0, DateTimeZone.UTC).getMillis();
...