Как я могу напечатать дату без часового пояса? - PullRequest
1 голос
/ 28 ноября 2010

У меня есть мобильное приложение, в котором я фиксирую дату / время и отправляю сервлету в виде миллисекунд.- Например, я фиксирую в своем мобильном телефоне 12:55 и отправляю его на сервер -

Итак, я строю дату из отправленных миллисекунд и печатаю ее с помощью SimpleDateFormat, но время отличается, выводится 8:55 утраЯ знаю, что проблема в том, что я использую 2 разных часовых пояса, мой вопрос: как я могу показать это время без применения какого-либо часового пояса, чтобы показать то же время?

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 28 ноября 2010

Вам нужно использовать Календарь, чтобы изменить часовой пояс, но для этого нет API.

// Change a date in another timezone
public static Date changeTimeZone(Date date, TimeZone zone) {
    Calendar first = Calendar.getInstance(zone);
    first.setTimeInMillis(date.getTime());

    Calendar output = Calendar.getInstance();
    output.set(Calendar.YEAR, first.get(Calendar.YEAR));
    output.set(Calendar.MONTH, first.get(Calendar.MONTH));
    output.set(Calendar.DAY_OF_MONTH, first.get(Calendar.DAY_OF_MONTH));
    output.set(Calendar.HOUR_OF_DAY, first.get(Calendar.HOUR_OF_DAY));
    output.set(Calendar.MINUTE, first.get(Calendar.MINUTE));
    output.set(Calendar.SECOND, first.get(Calendar.SECOND));
    output.set(Calendar.MILLISECOND, first.get(Calendar.MILLISECOND));

    return output.getTime();
}

Ссылка: http://blog.vinodsingh.com/2009/03/date-and-timezone-in-java.html

Я думаю, это должно сработать. Я не проверял это всесторонне.

2 голосов
/ 28 ноября 2010

Объекты Calendar и Date хранят информацию о дате в миллисекундах по отношению к UTC.

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

Это означает, что объекты Календарь / Дата не хранят разные значения для разных часовых поясов.Они всегда используют одно и то же значение внутри ... формат - это то, что обычно изменяется.

Может быть, вы можете использовать SimpleDateFormat в вашем местном / часовом поясе по умолчанию:

SimpleDateFormat sdf = new SimpleDateFormat("S")
Date d = sdf.parse(milliseconds);

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

sdf.setTimeZone(TimeZone.getTimeZone("GMT-8"));
System.out.println(sdf.toString());  

sdf.setTimeZone(TimeZone.getTimeZone("GMT-4"));
System.out.println(sdf.toString()); 
...