2014-10-29 4 views
2

В настоящее время я разрабатываю модуль синхронизации для одного из моих приложений. Я синхронизирую записи между локальным и сервером на основе LastUpdated time, что является ничем иным, как меткой времени. Сервер от Сингапура, так как я могу настроить часовой пояс для Сингапура в своем приложении для Android?JAVA: Получить время разного часового пояса

Я попытался,

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.ENGLISH); 
sdf.setTimeZone(TimeZone.getTimeZone("VST")); 

и

Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("Asia/Singapore")); 
System.out.println(calendar.get(Calendar.HOUR_OF_DAY)); 

Еще не повезло.

Или я могу установить общий часовой пояс для локального и серверного? Язык на стороне сервера: ASP.Net

+0

Возможный дубликат [Как установить часовой пояс java.util.Date?](http://stackoverflow.com/questions/2891361/how-to-set-time-zone-of-a-java- util-date) –

ответ

3

Ваш пример SimpleDateFormat почти правильный. Я верю, что вам нужна SGT для Сингапура, и вам нужно позвонить в DateFormat.format(Date). Вы также могли бы пройти TimeZone к Calendar.getInstace(TimeZone) как

TimeZone tz = TimeZone.getTimeZone("SGT"); 
sdf.setTimeZone(tz); 
System.out.println(sdf.format(Calendar.getInstance().getTime())); 
System.out.println(Calendar.getInstance(tz)); 
+0

Я попробовал ваше решение и получил результат как «AM_PM = 0, HOUR = 2, HOUR_OF_DAY = 2, MINUTE = 18', но я считаю, что время в Сингапуре будет около« 12:45 вечера ». Почему есть разница? – Aniruddha

+0

Время в [Сингапур] (http://en.wikipedia.org/wiki/Singapore_Standard_Time) также можно получить с помощью «UTC + 8» или поиска Google. Вы также можете использовать «UCT-8» в соответствии с этой [таблицей] (http://docs.oracle.com/cd/B10191_01/calendar.903/b10094/timezone.htm). Но если у меня неправильный TimeZone, должно быть возможно найти тот, который работает. –

+0

Спасибо, я тоже пробовал, но он все тот же. Все может быть сделано на стороне сервера?Как установить его в какой-то общий часовой пояс? – Aniruddha

0

Наконец, это то, как я ее решил.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.ENGLISH); 
TimeZone tz = TimeZone.getTimeZone("Asia/Singapore"); 
sdf.setTimeZone(tz); 

java.util.Date date= new java.util.Date(); 
Timestamp local = new Timestamp(date.getTime()); 
String strDate = sdf.format(date); 
System.out.println("Local in String format " + strDate); 
2

Joda времени

Когда делать что-либо существенное с даты и времени работы, вы должны избегать классов java.util.Date и java.util.Calendar, поскольку они, как известно, хлопотное, сбивает с толку, и недостатки , Вместо этого используйте библиотеку Joda-Time, которая работает в Android.

ISO 8601

Ваш входной строки близко к стандартному формату ISO 8601. Просто замените SPACE на T. Затем передайте результат конструктору DateTime вместе с объектом DateTimeZone, представляющим предполагаемый часовой пояс этой строки. Поиск StackOveflow для сотен примеров.

UTC

Как прокомментировал Эллиот Фриш, на стороне сервера вы должны работать и хранения значений даты и времени все в UTC. Преобразуйте в локальные зонированные значения только в том случае, если они ожидаются пользователем в пользовательском интерфейсе.

Сам сервер должен быть установлен в UTC, или, если это невозможно, установите в Reykjavík Iceland. Но ваше программирование никогда не должно предполагать, что сервер настроен так. В вашем программировании всегда указывается желаемый часовой пояс.

Поиск StackOverflow для сотен примеров и обсуждение этих вопросов.

+0

Благодарим вас за понимание. – Aniruddha