2012-06-06 26 views
0

将IST转换为GMT时,我遇到了一个奇怪的问题。除了下午5点半和6点半以外,转换工作将全天候正常进行。在此期间,而不是将时间转换为12:00:00,它将转换为00:00:00在Java中将IST转换为GMT时的问题

+3

请向我们展示您使用的代码。 –

+0

@Pablo 12:00 PM是正午,00:00是午夜。 – Rich

回答

0

好的,所以我猜测IST意味着印度标准时间;即GMT + 5:30。

5:30 pm因此IST将是12点GMT格林威治标准时间12:00:00,使用传统的24小时制。 (或者他们用来称呼它的“铁路时间”。)

没有任何进一步的输入,我最好的猜测是你的时间处理代码有一些错误(例如输入时间不是什么你认为它是),或者区域设置有些奇怪的现象会影响时间显示的方式。

0

我在这个答案中使用24小时保持清楚。

你确定你从17:30 IST转换?如果你实际上是在05:30(即上午五点三十分)转换格林尼治标准时间午夜。在24小时内午夜是00:00,所以这些都会加起来。

但是,这并不能解释从06:30开始的转换,而这将是格林威治时间01:30。

0

TL;博士

ZonedDateTime.of(2017 , 1 , 23 , 17 , 30 , 0 , 0 , ZoneId.of("Asia/Kolkata")) 
      .toInstant() 

2017-01-23T12:00:00Z

没有足够的信息

不可能精确回答这个问题,没有看到有问题的代码。但是我可以使用java.time类向您展示正确的现代代码。

使用java.time

通过“IST”你的意思是印度标准时间,爱尔兰标准时间,或伊朗标准时间?给出示例数据,我猜。

continent/region的格式指定一个proper time zone name,如America/MontrealAfrica/Casablanca,或Pacific/Auckland。切勿使用3-4字母缩写,如ESTIST,因为它们是而不是真正的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of("Asia/Kolkata"); 

LocalDate localDate = LocalDate.of(2017 , 1 , 23); 
LocalTime localTime = LocalTime.of(17 , 30); // 5:30 PM. 

ZonedDateTime zdt = ZonedDateTime.of(localDate , localTime , z); 

要通过UTC的透镜观看相同的时刻,提取InstantInstant类表示UTC中时间轴上的一个时刻,分辨率为nanoseconds(小数点后最多九(9)位数字)。

Instant instant = zdt.toInstant(); 

看到这个code run live at IdeOne.com

在这个日期,印度的时间比UTC早5个半小时。因此,将下午加尔各答下午5点30分调整为UTC意味着减去5小时30分钟,这将我们带回到UTC的中午。所以你在结果中看到。

zdt.toString():2017-01-23T17:30 + 05:30 [亚/加尔各答]

instant.toString():2017-01-23T12:00:00Z


关于java.time

java.time框架是建立在Java 8和更高版本。这些类取代了日期时间类legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time项目现在位于maintenance mode,建议迁移到java.time类。请参阅Oracle Tutorial。并搜索堆栈溢出了很多例子和解释。规格是JSR 310

从何处获取java.time类?

ThreeTen-Extra项目与其他类扩展java.time。这个项目是未来可能增加java.time的一个试验场。您可以在这里找到一些有用的类,如Interval,YearWeek,YearQuartermore