Есть ли ошибка java.util.Date? Выполняя некоторое тестирование, я устанавливал миллисекунды для 2147483647, который должен дать мне дату 2038-01-19 03:14:07, но возвращается 1970-01-25 20:31:23. Также попробовал это с 4294967295 и получил неправильный ответ 1970-02-19 17:02:47. Кто-нибудь знает о работе вокруг
import java.util.*;
import java.io.*;
/*
centos 6.3 x64
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build 1.7.0_13-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)
*/
public class Test
{
static public void main(String args[])
{
long ms = 2147483647L;
java.util.Date d = new java.util.Date( ms );
java.text.SimpleDateFormat df = new java.text.SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
// SHOULD be 2038-01-19 03:14:07
System.out.println( df.format( d ) );
System.out.println(df.format(new Date(Long.MAX_VALUE)));
System.out.println( "\n" + ms );
System.out.println( Long.MAX_VALUE );
}
}
1970-01-25 20:31:23 292278994-08-17 07:12:55
2147483647 9223372036854775807
2147483647 миллисекунд - это всего лишь 24,8 дня, поэтому он появляется как 1970-01-25 20:31:23.
4294967295 миллисекунд составляет всего около 49,7 дней, так что почему он появляется как 1970-02-19 17:02:47.
Вы можете рассчитывать, что вы ожидаете, на основе 2147483647 секунд вместо миллисекунд. Это не ошибка в java.util.Date; преобразуйте значение секунд в миллисекунды умножением на 1000.