Когда я запускаю код ниже локально, дата & Время вернется как UTC правильно (на стороне клиента). Когда я запускаю сервер GAE локально и записываю в базу данных mySQL, находящуюся в Облаке Google, он также сохраняет дату как UTC.TimeZones в Google Web Toolkit (GWT), GAE и Google Cloud SQL (mySQL)
Однако, когда я развертываю webapp в Google App Engine (GAE), время хранится как UTC + 4 часа. Тот же mySQL-сервер в Google Cloud установлен в часовой пояс Eastern/NY, что означает, что сервер mySQL компенсирует (что, по его мнению, UTC), добавив 4 часа для моего прохождения в UTC.
Другими словами, mySQL добавляет 4 часа, когда GAE отправляет это значение ... но не тогда, когда мой локальный сервер делает это. Поэтому я предполагаю, что вопрос в том, почему он правильно хранится, когда я убегаю от своего локального GAE, но добавляю 4 часа при запуске GAE?
Объект TimeZone из библиотеки com.google.gwt.i18n.client.TimeZone. Как я могу гарантировать время и время UTC независимо от того, где находится мой клиент или сервер? Мое приложение не может полагаться на какой-либо сервер на время, поскольку он будет работать в автономном режиме большую часть времени.
private static Date getNowDateTimeUTC() {
DateTimeFormat df = DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss.SSS");
String utcDateString = df.format(new Date(), TimeZone.createTimeZone(0));
Date returnDate = DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss.SSS").parse(utcDateString);
returnDate.setTime((returnDate.getTime()/1000) * 1000); // rid the milliseconds
return returnDate;
}
Избегайте использования класса Date, оно имеет недостатки. Java 8 имеет для этого Instant-класс. –
GAE по-прежнему поддерживает только Java 7 :( –
Мне интересно, если сохранение даты в эпоху секунд делает sesnse ... тот же размер хранилища ... и mySQL не будет пытаться настроить часовой пояс даты. –