Мне нужно изменить дату вместе с часовым поясом

StackOverflow https://stackoverflow.com/questions/19823789

  •  04-07-2022
  •  | 
  •  

Вопрос

У меня есть объект календаря [localdate], который находится в EST: скажем, 6 ноября, 15:34 ... и я установил часовой пояс на GMT+5: 30 ... теперь, когда я делаю Calendar.HOUR_OF_DAY Это возвращает мне 2 ... что, я знаю, идеально .. с 15:34 + 5 часов к GMT, а затем +5: 30 к часовому поясу .. что просто означает .. 26:04, что 2 из 7 -го.

Однако дата все еще остается 6 ноября ... и localDate.getTime() Все еще возвращается 6 ноября .. и даже когда я печатаю локальный зал .. он показывает часовой пояс +5: 30, но день и все остальное все еще как оригинальное местное время ... [т.е. 6 ноября

Я просто не могу понять, почему ...

Редактировать ::

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

Нет правильного решения

Другие советы

localDate.getTime() Возвращает а java.util.Date которое является количеством необработанного времени со времен фиксированной точки. Часовые пояса влияет только на читаемое представление человека о том времени.

15:34 Nov 6th UTC - 5а также02:04 Nov 7th UTC + 5:30

оба одинаково то же самое в абсолютное время. Это всего лишь два разных человеческих способа описания одного и того же мгновенного.

Таким образом, изменение часового пояса в календаре не влияет на значение, возвращаемое getTime()

Date У объектов нет часового пояса - Date Объект представляет собой «абсолютный» момент времени. Когда вы печатаете Date объект (неявно или явно вызывая toString() в теме):

Date date = ...;
System.out.println(date);

Затем он будет отформатирован с использованием некоторого формата по умолчанию, который покажет дату в вашем местном часовом пояске - независимо от того, получили ли вы Date объект из а Calendar который был настроен на другой часовой пояс.

Если вы хотите отобразить Date В другом часовом поясе используйте DateFormat объект и установите часовой пояс, в котором вы хотите отобразить дату в этом объекте:

Date date = ...;

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
df.setTimeZone(TimeZone.getTimeZone("UTC"));  // For example, UTC

// Prints 'date' in UTC
System.out.println(df.format(date));

Вопрос не ясен

Ваш вопрос сбивает с толку.

Вы можете быть запутаны в значении часовых поясов. Как сказали в правильных ответах Джеспера и Аффе, смещение часовых поясов не меняет точку зрения на временной линии вселенной. Предположим, Боб в Нью -Йорке США звонит Сьюзен в Рейкьявике Исландии. Исландия использует UTC в качестве своего часового пояса круглый год. Боб и Сьюзен разговаривают друг с другом в тот же момент времени. Но если Боб смотрит на часы на своей стене, он видит, как показано время, на 5 часов раньше, чем часы на стене Сьюзен. Нью-Йорк имеет пятичасовое смещение за UTC (-5: 00).

Еще одна проблема с вашим вопросом: вы также говорите о смещении часового пояса 5:00, а также о смещении 5:30. Что он? Или у вас есть два часовых пояса, а также GMT/UTC?

Joda-Time

Я сделаю удар, чтобы дать вам немного примера исходного кода.

А Joda-Time Библиотека облегчает работу времени.

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.

// Use time zone names rather than explicit number of hours offset is generally a good thing.
// Affords Joda-Time an opportunity to make adjustments such as Daylight Saving Time (DST).

// Question asked:
// (1) Start with a US east coast time (Standard offset of -5:00) of November 6, 2013 15:34.
// (2) Move that datetime to UTC (GMT) time zone (no offset).
// (3) Move that datetime to Kolkata (formerly known as Calcutta) India time zone (Standard offset of +05:30).

// Joda-Time has deprecated use of 3-letter time zone codes because of their inconsistency. Use other identifier for zone.
// Time Zone list: http://joda-time.sourceforge.net/timezones.html  (Possibly out-dated, read note on that page)
org.joda.time.DateTimeZone newyorkTimeZone = org.joda.time.DateTimeZone.forID( "America/New_York" );
org.joda.time.DateTimeZone kolkataTimeZone = org.joda.time.DateTimeZone.forID( "Asia/Kolkata" );

// Question calls for: EST Nov 6, 15:34 (Standard offset of -5:00).
// This DateTime constructor calls for passing: year, month, day, time zone.
org.joda.time.DateTime dateTimeInNewYork = new org.joda.time.DateTime( 2013, org.joda.time.DateTimeConstants.NOVEMBER, 6, 15, 34, newyorkTimeZone );
// Move to UTC time zone (no offset).
org.joda.time.DateTime dateTimeUtc = dateTimeInNewYork.toDateTime( org.joda.time.DateTimeZone.UTC );
// Move to Kolkata IN time zone (Standard offlet of +05:30).
org.joda.time.DateTime dateTimeInKolkata = dateTimeUtc.toDateTime( kolkataTimeZone ); // Or invoke this method on dateTimeInNewYork, does not matter which.

// All three of these date-time objects represent the same moment in the time-line of the Universe,
// but present themselves with different time-zone offsets.
System.out.println( "dateTimeInNewYork: " + dateTimeInNewYork );
System.out.println( "dateTimeUtc: " + dateTimeUtc );
System.out.println( "dateTimeInKolkata: " + dateTimeInKolkata );

При беге…

dateTimeInNewYork: 2013-11-06T15:34:00.000-05:00
dateTimeUtc: 2013-11-06T20:34:00.000Z
dateTimeInKolkata: 2013-11-07T02:04:00.000+05:30

enter image description here

О Джоде-Время ...

// Joda-Time - The popular alternative to Sun/Oracle's notoriously bad date, time, and calendar classes bundled with Java 7 and earlier.
// http://www.joda.org/joda-time/

// Joda-Time will become outmoded by the JSR 310 Date and Time API introduced in Java 8.
// JSR 310 was inspired by Joda-Time but is not directly based on it.
// http://jcp.org/en/jsr/detail?id=310

// By default, Joda-Time produces strings in the standard ISO 8601 format.
// https://en.wikipedia.org/wiki/ISO_8601

// About Daylight Saving Time (DST): https://en.wikipedia.org/wiki/Daylight_saving_time

// Time Zone list: http://joda-time.sourceforge.net/timezones.html
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top