Преобразование даты и времени в другой часовой пояс в java

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

Текущее время в Индии : :: Fri Feb 24 16:09:23 IST 2012

Дата и время :: Центральное стандартное время :: Sat Feb 25 03:39:23 IST 2012

И фактическое время в соответствии с часовым поясом КНТ :

 Friday, 24 February 4:39:16 am(GMT - 6:00) 

Так что есть промежуток времени . и я не знаю, почему это происходит. Любая помощь будет оценена. Код:

 package MyPackage; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; public class Temp2 { public static void main(String[] args) { try { Calendar currentdate = Calendar.getInstance(); String strdate = null; DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); strdate = formatter.format(currentdate.getTime()); TimeZone obj = TimeZone.getTimeZone("CST"); formatter.setTimeZone(obj); //System.out.println(strdate); //System.out.println(formatter.parse(strdate)); Date theResult = formatter.parse(strdate); System.out.println("The current time in India is :: " +currentdate.getTime()); System.out.println("The date and time in :: "+ obj.getDisplayName() + "is ::" + theResult); } catch (ParseException e) { e.printStackTrace(); } } } 

Это через Интернет. Может быть, googled. В любом случае, вот версия для вас (бесстыдно выбрана и изменена отсюда ):

 Calendar calendar = Calendar.getInstance(); TimeZone fromTimeZone = calendar.getTimeZone(); TimeZone toTimeZone = TimeZone.getTimeZone("CST"); calendar.setTimeZone(fromTimeZone); calendar.add(Calendar.MILLISECOND, fromTimeZone.getRawOffset() * -1); if (fromTimeZone.inDaylightTime(calendar.getTime())) { calendar.add(Calendar.MILLISECOND, calendar.getTimeZone().getDSTSavings() * -1); } calendar.add(Calendar.MILLISECOND, toTimeZone.getRawOffset()); if (toTimeZone.inDaylightTime(calendar.getTime())) { calendar.add(Calendar.MILLISECOND, toTimeZone.getDSTSavings()); } System.out.println(calendar.getTime()); 

Ваша ошибка состоит в том, чтобы вызывать parse вместо format .

Вы вызываете parse для синтаксического анализа даты из строки, но в вашем случае у вас есть дата и ее необходимо отформатировать с использованием правильной часовой пояс.

Замените код на

 Calendar currentdate = Calendar.getInstance(); DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); TimeZone obj = TimeZone.getTimeZone("CST"); formatter.setTimeZone(obj); System.out.println("Local:: " +currentdate.getTime()); System.out.println("CST:: "+ formatter.format(currentdate.getTime()) 

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

Обработка дат в Java в моей повседневной работе – нетривиальная задача. Я предлагаю вам использовать Joda-Time, которые упрощают наши кодирующие дни, и вам не нужно «изобретать колесо».

Попробуйте что-то вроде этого

 Date date = new Date(); String formatPattern = ....; SimpleDateFormat sdf = new SimpleDateFormat(formatPattern); TimeZone T1; TimeZone T2; // set the Calendar of sdf to timezone T1 sdf.setTimeZone(T1); System.out.println(sdf.format(date)); // set the Calendar of sdf to timezone T2 sdf.setTimeZone(T2); System.out.println(sdf.format(date)); // Use the 'calOfT2' instance-methods to get specific info // about the time-of-day for date 'date' in timezone T2. Calendar calOfT2 = sdf.getCalendar(); 

Вы можете просто использовать «CST6CDT», потому что в некоторых странах они следуют за CDT летом и CST зимой

  public static String getDateInCST() { Calendar calendar = Calendar.getInstance(); DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); formatter.setTimeZone(TimeZone.getTimeZone( "CST6CDT")); String strdate = formatter.format(calendar.getTime()); TimeZone.getAvailableIDs(); return strdate; } 

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

 Calendar currentdate = Calendar.getInstance(); String strdate = null; DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ssz"); strdate = formatter.format(currentdate.getTime()); System.out.println("strdate=>" + strdate); TimeZone obj = TimeZone.getTimeZone("CST"); formatter.setTimeZone(obj); strdate = formatter.format(currentdate.getTime()); Date theResult = formatter.parse(strdate); System.out.println("The current time in India is :: " +currentdate.getTime()); System.out.println("The date and time in :: " + obj.getDisplayName() + "is ::" + theResult); System.out.println("The date and time in :: " + obj.getDisplayName() + "is ::" + strdate); 
  • В каком часовом поясе отображается Date.toString ()?
  • Преобразование даты времени из часового пояса в часовой пояс в sql-сервере
  • Как анализировать дату с GMT TimeZone на IST TimeZone и наоборот в android
  • Как бороться с проблемой часового пояса при хранении дат в utc с использованием mongod?
  • MySQL CONVERT_TZ ()
  • Разбор даты и времени ISO8601 (включая TimeZone) в Excel
  • Предотrotation изменения часового пояса при десериализации значения DateTime
  • Получить время определенного часового пояса
  • Как установить часовой пояс java.util.Date?
  • Interesting Posts

    Как JSON сериализует множество?

    Как я могу запустить стартапы и посмотреть, какие процессы занимают дольше всего?

    Может ли ffmpeg показать индикатор выполнения?

    Ошибка при получении: Ошибка аутентификации сверстников для пользователя «postgres» при попытке заставить pgsql работать с рельсами

    Android-эмулятор спама logcat с «Service com.android.exchange.ExchangeService просочился ServiceConnection …, который был первоначально связан здесь

    Двойной экран ПК понижен до одного экрана, программы работают на втором экране

    Как я могу легко разбить CSV на два листа Excel с помощью PowerShell?

    Как сохранить визуализаторы Visual Studio отладчика от тайм-аута?

    Запрос GZip POST с HTTPClient в Java

    Как добавить новое ядро ​​в grub2

    mongodb: как получить последние N записей?

    Восстановить базу данных mysql из файлов .frm

    Как извлечь все внешние ссылки на веб-страницу и сохранить их в файле?

    Таинственная stacktrace в консоли разработчика Android (размер растрового изображения превышает 32 бит)

    Можно ли использовать ноутбук как «роутер», используя старый концентратор и подключая другие устройства к Wi-Fi-ноутбуку?

    Давайте будем гением компьютера.