Java.util. Календарь - миллисекунды начиная с Jan 1, 1970

  • Окно -> Устройства и усилители; Симуляторы
  • Удалить симулятор
  • Добавить тот же симулятор
  • Запустить тесты снова
8
задан Chris Jester-Young 4 November 2008 в 20:58
поделиться

6 ответов

Даты Вы печатаете от Calendar локальны для Вашего часового пояса, тогда как эпоха определяется, чтобы быть полуночью от 01.01.1970 в UTC. Таким образом, если Вы будете жить в часовом поясе к западу от UTC, то затем Ваша дата обнаружится как 31.12.1969, даже при том, что (в UTC) это все еще 01.01.1970.

12
ответ дан 5 December 2019 в 06:10
поделиться

Во-первых, c.get(Calendar.MONTH) возвраты 0 для Jan, 1 на февраль, и т.д.

Во-вторых, использовать DateFormat производить даты.

В-третьих, Вашими проблемами является яркий пример того, как Дата неловкого Java API. Используйте Время Joda API, если Вы можете. Это сделает Вашу жизнь несколько легче.

Вот лучший пример Вашего кода, который указывает на часовой пояс:

public static void main(String[] args) {

    final DateFormat dateFormat = SimpleDateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);

    long l = 10000000L;
    System.out.println("Long value: " + l);
    Calendar c = new GregorianCalendar();
    c.setTimeInMillis(l);
    System.out.println("Date: " + dateFormat.format(c.getTime()));

    l = 1000000000000L;
    System.out.println("\nLong value: " + l);
    c.setTimeInMillis(l);
    System.out.println("Date: " + dateFormat.format(c.getTime()));
}
6
ответ дан 5 December 2019 в 06:10
поделиться

К сожалению, java.util.Date и java.util.Calendar были плохо разработаны, ведя к этому виду беспорядка.

3
ответ дан 5 December 2019 в 06:10
поделиться

Можно выяснить себя при изменении первого c.setTimeInMillis(l); в c.clear();

0
ответ дан 5 December 2019 в 06:10
поделиться

Ваш часовой пояс, скорее всего, отстает от GMT (например, GMT-5), поэтому 10 000 000 мс с эпохи находятся 31 декабря 1969 в Вашем часовом поясе, но так как месяцы основаны на нуле в java.util.Calendar Ваш Calendar- преобразование к тексту испорчено, и Вы добираетесь 31.11.1969 вместо ожидаемых 31.12.1969.

1
ответ дан 5 December 2019 в 06:10
поделиться

Calendar#setTimeInMillis () устанавливает время календаря на количество миллисекунд после Jan 1, 1970 GMT.

Calendar#get () возвращает требуемое поле, скорректированное для часового пояса календаря, который, по умолчанию, является локальным часовым поясом Вашей машины.

Это должно работать, как Вы ожидаете, указываете ли Вы часовой пояс "GMT" при построении календаря:

Calendar c = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
5
ответ дан 5 December 2019 в 06:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: