Генерация UTC времени в Java - PullRequest
5 голосов
/ 29 июля 2010

Я хочу получить время UTC для 01.01.2100 в Java на «2100-01-01 00:00:00». Я получаю "2100-01-01 00:08:00". Есть идеи, как это исправить.

public Date getFinalTime() {
    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));

    DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    Date finalTime = null;

    try
    {
        finalTime = df.parse("01/01/2100");            
    } catch (ParseException e)
    {
        e.printStackTrace();
    }

    calendar.setTime(finalTime);
    return calendar.getTime();
}

Ответы [ 2 ]

9 голосов
/ 29 июля 2010

Вам необходимо также указать часовой пояс для SimpleDateFormat - в настоящее время это анализирует полночь местное время , которое заканчивается как 8:00 UTC.

TimeZone utc = TimeZone.getTimeZone("UTC");
Calendar calendar = Calendar.getInstance(utc);

DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
df.setTimeZone(utc);
Date finalTime = null;

try
{
    finalTime = df.parse("01/01/2100");            
} catch (ParseException e)
{
    e.printStackTrace();
}

calendar.setTime(finalTime);

Как всегда, я бы лично порекомендовал использовать Joda Time , который в целом гораздо более эффективен. Буду рад перевести ваш пример на Joda Time, если хотите.

Кроме того, я вижу, что вы возвращаете calendar.getTime() - это то же самое, что возвращать finalTime, как только вы его вычислили.

Наконец, просто поймать ParseException и продолжать, как будто этого не произошло, очень плохая идея. Я надеюсь, что это просто пример кода, и он не отражает ваш реальный метод. Точно так же я предполагаю, что на самом деле вы будете анализировать какой-то другой текст - если вы этого не сделаете, то, как сказал Эял, вам следует просто вызывать методы на Calendar напрямую. (Или снова используйте Joda Time.)

2 голосов
/ 29 июля 2010

Вам необходимо также установить часовой пояс объекта SimpleDateFormat, в противном случае он принимает часовой пояс по умолчанию.

В любом случае, в вашем случае достаточно использовать только Календарь. Используйте его установщики, чтобы установить правильные значения для всех полей (год, месяц, день, час и т. Д.), А затем получить время.

...