Java - хранить время по Гринвичу - PullRequest
0 голосов
/ 11 мая 2009
  1. Мой сервер имеет GMT + 7, поэтому, если я перейду на другой сервер с другим часовым поясом GMT, вся дата, сохраненная в БД, будет неправильной?
  2. Да, Q1 правильно, как насчет того, чтобы сохранить дату в часовом поясе GMT ​​+ 0 и отобразить ее в пользовательском часовом поясе GMT, выбранном каждым участником
  3. Как я могу получить дату с GMT + 0 в Java

Ответы [ 5 ]

11 голосов
/ 11 мая 2009

1) Чтобы процитировать Javadocs, метки времени Java в миллисекундах равны

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

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

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

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

2 голосов
/ 29 сентября 2009

Чтобы добавить к точке отметки, когда у вас есть 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)
1 голос
/ 11 мая 2009

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

0 голосов
/ 07 сентября 2016

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

0 голосов
/ 28 июля 2010

Я хотел бы предложить, чтобы вы использовали Date только в качестве "держателя" и предлагали вместо этого использовать экземпляры Calendar Чтобы получить календарь в часовом поясе GMT, просто используйте это:

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

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

cal.add(Calendar.HOUR, 1);

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

Date date = cal.getTime();
...