Использование Joda, как вы форматируете UTC +/- н время, чтобы "время стена", которая будет отображаться для пользователя:UTC-Н Время
С (UTC +/- N):
2015-05-15T03:28:49.523-04:00
К (EST) стены:
2015-05-14 23:22:44
Update (1)
Обратите внимание на следующий код. Нам нужна отметка времени для записи в БД и из базы данных в формате UTC. Имея это в виду:
DateTimeZone.setDefault(DateTimeZone.UTC);
LocalDateTime utcDate = new LocalDateTime();
DateTimeZone utcTZ = DateTimeZone.forTimeZone(TimeZone.getTimeZone("ETC/UTC"));
DateTimeZone localTZ = DateTimeZone.forTimeZone(TimeZone.getTimeZone("America/Montreal"));
DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
fmt.withZone(localTZ);
DateTime localDateTime = utcDate.toDateTime(localTZ);
DateTime utcDateTime = localDateTime.toDateTime(utcTZ);
Timestamp u = new Timestamp(utcDateTime.getMillis());
System.out.println("UTC Time: " + u);
LocalDateTime date = new LocalDateTime(u);
DateTime srcDateTime = date.toDateTime(utcTZ);
DateTime dstDateTime = srcDateTime.toDateTime(localTZ);
System.out.println("UTC+/- Time: " + dstDateTime.toString());
DateTime dateTimeInTargetTimezone = dstDateTime.withZone(localTZ);
System.out.println("Wall Time: " + dateTimeInTargetTimezone.toString("yyy-MM-dd HH:mm:ss"));
Теперь, когда извлекая время UTC из БД в объект Timestamp, нам нужно для отображения времени для конечного пользователя в «Wall/Funeral Time», что вы хотите называть его, в их ТЗ.
Выход
UTC Time: 2015-05-15 20:03:47.561 "Good"
UTC+/- Time: 2015-05-15T20:03:47.561-04:00 "Good"
Wall Time: 2015-05-15 20:03:47 "No! No! No! Danger! We'll be late!"
Что в имени! Должен ли я сделать, чтобы получить dstDateTime
, чтобы сравнять время, которое я вижу на своей стене (то есть, 2015-05-15 4:03:47).
Update (2)
Избавился Timestamp:
DateTimeZone utcTZ = DateTimeZone.forTimeZone(TimeZone.getTimeZone("ETC/UTC"));
DateTimeZone localTZ = DateTimeZone.forTimeZone(TimeZone.getTimeZone("America/Montreal"));
DateTimeFormatter fmt = DateTimeFormat.forPattern("yyy-MM-dd HH:mm:ss");
LocalDateTime utcDate = new LocalDateTime(utcTZ);
DateTime utcDateTime = utcDate.toDateTime(utcTZ);
System.out.println("UTC Time: " + utcDateTime);
DateTime dstDateTime = utcDateTime.toDateTime(localTZ);
System.out.println("Unformated Wall Time: " + dstDateTime);
System.out.println("Wall Time: " + dstDateTime.toString(fmt));
Выход однако
UTC Time: 2015-05-20T14:09:28.469Z
Unformated Wall Time: 2015-05-20T10:09:28.469-04:00
Wall Time: 2015-05-20 10:09:28
Все выглядит идеально, когда я пытаюсь исправить дату UTZ к БД , Мне нужно преобразовать в Timestamp (то есть новую отметку времени (o.getOrderDate(). GetMillis())), и она, очевидно, права loca l время для БД, а не UTC Zulu время, которое мне нужно.
Thanks in Advance,
Nick.
Я также хотел бы поставить «время стены»
2015-05-14 23:22:44
в объект Timestamp. –Ваши комментарии о конверсиях в вашем обновлении не имеют смысла. Во-первых, вы печатаете «UTC time» и вывод java.sql.Timestamp.toString, но этот вывод не находится в UTC, он находится в вашем локальном часовом поясе.Который будет установлен TimeZone.setDefault, который вы не вызываете (хотя вы вызываете DateTimeZone.setDefault, поэтому Joda-Time имеет другой часовой пояс по умолчанию для java.util.Date). Установите оба значения по умолчанию для UTC, и выходы должны иметь больше смысла. – araqnid
Привет, Аракнид! Большое вам спасибо, что сейчас гораздо больше присылают. Посмотрите мое обновление выше. –