2009-05-11 3 views
0
  1. У моего сервера GMT + 7, поэтому, если я перехожу на другой сервер, есть другой часовой пояс GMT, вся дата, хранящаяся в db, будет неправильной?
  2. Да Q1 правильно, как о я буду хранить дату в GMT + 0 часовой пояс и отобразить его в пользовательских часовом поясе, выбранной каждым членом
  3. Как я получаю дату с GMT + 0 в Java

ответ

11

1) Цитирую из Javadocs, Java миллисекунды метки времени являются

разница, измеряется в миллисекундах, между текущим временем и в полночь 1 января 1970 UTC.

Следовательно, поскольку временная метка UTC/GMT, если вы храните ее в базе данных, эта дата будет правильной независимо от часового пояса сервера.

2) Форматирование метки времени для отображения в зависимости от часового пояса будет правильным подходом.

3) Создание нового экземпляра java.util.Date и вызов getTime() предоставит вам временную метку для GMT + 0 на Java.

1

По по умолчанию, когда вы получаете дату в java в текущем часовом поясе, вы можете использовать класс TimeZone для получения часового пояса, в течение которого выполняется ваше системное время. Большинство баз данных поддерживают, что даты могут быть сохранены с часовым поясом, что, вероятно, будет правильным способом сделайте это, но точно, какой формат может зависеть от используемой вами базы данных.

2

Чтобы добавить к точке метки, как только у вас есть java.util.Date, вы можете «преобразовать» ее в любой часовой пояс (выбранный пользователем). Вот пример кода, в Groovy (будет работать в Java с небольшими модами):

// This is a test to prove that in Java, you can create ONE java.util.Date 
// and easily re-display it in different TimeZones 
fmtStr = "MM/dd/yyyy hh:mm aa zzz" 
myDate = new java.util.Date() 
sdf = new java.text.SimpleDateFormat(fmtStr) 

// Default TimeZone 
println "Date formatted with default TimeZone: " + sdf.format(myDate) 

// GMT 
sdf.setTimeZone(TimeZone.getTimeZone("GMT")) 
println "Date formatted with GMT TimeZone: " + sdf.format(myDate) 

// America/New_York 
sdf.setTimeZone(TimeZone.getTimeZone("America/New_York")) 
println "Date formatted with America/New_York TimeZone: " + sdf.format(myDate) 

// PST 
sdf.setTimeZone(TimeZone.getTimeZone("PST")) 
println "Date formatted with PST TimeZone: " + sdf.format(myDate) 
0

Я хотел бы предложить, что вы используете дату только в качестве «владельца» и предлагаю использовать экземпляры календаря вместо этого. Чтобы получить календарь в время GMT зоне просто используйте:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+00")) 

календарный обеспечат большую пользу, когда вы работаете с временем и датой. Например, добавление час это просто:

cal.add(Calendar.HOUR, 1); 

Наконец, когда требуется Дата вы просто использовать это:

Date date = cal.getTime(); 
0

Для Q3, рекомендуется использовать класс ZonedDateTime.

Смежные вопросы