Android: изменить часовой пояс строки даты - PullRequest
0 голосов
/ 01 марта 2012

Я пробовал это около часа, но, похоже, он не работает должным образом.

Я в основном читаю строку даты из базы данных, она в формате yyyy-MM-dd ЧЧ: мм: сс (2012-03-01 14:32:00).

На данный момент у меня есть только строка, без информации о часовом поясе.Это время создается на нашем сервере и, в конце концов, попадает в базу данных устройства, я точно знаю, что это восточное стандартное время.

Итак, я в основном попробовал следующий код:

SimpleDateFormat sourceFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
        sourceFormat.setTimeZone(TimeZone.getTimeZone("EST"));

        Date parsed = sourceFormat.parse("2012-03-01 10:18:14"); 

        TimeZone tz = TimeZone.getDefault(); 
        SimpleDateFormat destFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
        destFormat.setTimeZone(tz);  

        String result = destFormat.format(parsed);

        Log.v("TZ", result);

Мой эмулятор EST, поэтому, когда я регистрирую время, оно показывает 2012-03-01 10:18:14, что правильно.

Но если я изменю часовой пояс sourceFormat, чтобы сказать, что Америка / Лос-Анджелес, я получаювыход 2012-03-01 05: 18: 14.

Сейчас я не эксперт, но я уверен, что Лос-Анджелес на 3 часа отстает от Монреаля (EST, где находится наш офис).Поэтому, если я возьму время 2012-03-01 10:18:14 и назову его временем в Америке / Лос-Анджелесе, то конвертирую его в EST. Я ожидаю увидеть 2012-03-01 13: 18: 14.

Что происходит?

Любая помощь будет оценена.

Большое спасибо.

1 Ответ

0 голосов
/ 29 октября 2012

Если вы еще не решили эту проблему, использование трехбуквенных идентификаторов часовых поясов (например, в вашем случае «EST») было бы устаревшим из JDK 1.2, потому что одно и то же сокращение часто используется для нескольких часовых поясов например, «CST» может быть «центральное стандартное время США» и «стандартное время Китая»), и тогда платформа Java может распознавать только один из них. Таким образом, даже если вы укажете sourceFormat.setTimeZone(TimeZone.getTimeZone("EST"));, для вашего часового пояса будет выбран часовой пояс GMT.

Чтобы избежать этого, вы можете попробовать заменить трехбуквенные идентификаторы зоны на -
Общий часовой пояс формат: sourceFormat.setTimeZone(TimeZone.getTimeZone("GMT-05:00"));,

или RFC 822 часовой пояс формат: sourceFormat.setTimeZone(TimeZone.getTimeZone("-05"));.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...