Конвертировать строку GMT DateTime - PullRequest
5 голосов
/ 18 июля 2011

Я довольно новичок в Java и немного застрял в использовании SimpleDateFormat и Calendar.У меня есть Date-Object и я хочу извлечь строку даты GMT, например yyyy-MM-dd HH:mm:ss.Я живу в Германии, и на данный момент мы GMT +0200.Время моего объекта даты, например, 2011-07-18 13:00:00.Теперь мне нужно 2011-07-18 11:00:00.Смещение для моего часового пояса должно рассчитываться автоматически.

Я пробовал что-то вроде этого, но я предполагаю, что где-то есть ошибка:

private String toGmtString(Date date){
    SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    TimeZone timeZone = TimeZone.getDefault();
    Calendar cal = Calendar.getInstance(new SimpleTimeZone(timeZone.getOffset(date.getTime()), "GMT"));
    sd.setCalendar(cal);
    return sd.format(date);
}

На некоторых устройствах строка даты возвращается так, как я хочуэто к.На других устройствах смещение не рассчитывается правильно, и я получаю дату и время от объекта ввода даты.Можете ли вы дать мне несколько советов или советов?Я думаю, что мой способ получить часовой пояс по умолчанию не работает?

Ответы [ 2 ]

5 голосов
/ 18 июля 2011
private String toGmtString(Date date){
    SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    sd.setTimeZone(TimeZone.getTimeZone("GMT"));
    return sd.format(date);
}

Вам не нужно создавать новый SimpleTimeZone, потому что вы не изобретаете новый часовой пояс - в вашей программе есть 2 существующих часовых пояса, GMT и ваш по умолчанию.

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

Все, что вам нужно сделать, это указать SimpleDateFormat, какой часовой пояс использовать при форматировании.

2 голосов
/ 18 июля 2011
private String toGmtString(Date date){
    //date formatter
    SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    //getting default timeZone
    TimeZone timeZone = TimeZone.getDefault();
    //getting current time
    Calendar cal = Calendar.getInstance()
    cal.setTime(date) ;
    //adding / substracting curren't timezone's offset
    cal.add(Calendar.MILLISECOND, -1 * timeZone.getRawOffset());    
    //formatting and returning string of date
    return sd.format(cal.getTime());
}
...