Я подозреваю, что в вашей JRE происходит что-то странное:
import java.util.*;
public class Test {
public static void main(String[] args) {
Date d = new Date(1111111111);
System.out.println(d); // Prints Tue Jan 13 21:38:31 GMT 1970
}
}
Так что XML выглядит корректно для меня.
Тестирование с C # просто для проверки ...
РЕДАКТИРОВАТЬ: Просто чтобы еще больше запутать вещи, .NET и Mono, кажется, думают, что это 20: 38: 31: использование системы;
class Test
{
static void Main()
{
DateTimeOffset epoch = new DateTimeOffset(1970, 1, 1, 0, 0, 0,
TimeSpan.Zero);
TimeSpan millis = TimeSpan.FromMilliseconds(1111111111);
// Prints 1970-01-13 20:38:31Z
Console.WriteLine((epoch + millis).ToString("u"));
}
}
Я в замешательстве ...
РЕДАКТИРОВАТЬ: Хорошо, мы можем решить это довольно легко.1111111111 миллисекунд составляют ~ 308,64 часа, то есть 12 дней и 20 часов ... что означает, что .NET здесь.
У меня нет понятия почему Java заявляет, что это 9 вечера.Попытка с Joda ...
РЕДАКТИРОВАТЬ: Joda подтверждает результат .NET:
import org.joda.time.*;
public class Test {
public static void main(String[] args) {
DateTime dt = new DateTime(1111111111, DateTimeZone.UTC);
System.out.println(dt); // Prints 1970-01-13T20:38:31.111Z
}
}
Таким образом, остается два вопроса:
- Почему машина OPпечать 22: 38: 31?
- Почему мой аппарат печатает 21: 38: 31?
РЕДАКТИРОВАТЬ: Хорошо, прогресс:
import java.util.*;
import java.text.*;
public class Test {
public static void main(String[] args) {
Date date = new Date(1111111111);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
df.setTimeZone(TimeZone.getTimeZone("UTC"));
// Prints 1970-01-13 20:38:31 UTC
System.out.println(df.format(date));
}
}
I интересно , не было ли GMT в UTC в 1970 году, что объясняло бы вещи ... проверяя сейчас ...
РЕДАКТИРОВАТЬ: Хорошо, у меня есть некоторое представление о том, что вызывает здесь путаницу.С 27 октября 1968 года по 31 октября 1971 года Великобритания была в UTC + 1 (фактически - сам UTC не был введен до 1972 года).Поэтому, когда здесь говорится «GMT», это на самом деле означает «часовой пояс Европы / Лондона в это время», который на самом деле не был GMT.Особенно прискорбно, что эта странность произошла в эпоху Unix ...