如何将时间从GMT转换为EST

我有(yyyyMMddHHmmss)格式的日期和时间“20140508063630”。 我想将此时间转换为EST时区。 我该怎么做? 如果此转换有任何API,请告诉我们。 提前致谢。

try { DateFormat gmtFormat = new SimpleDateFormat(); TimeZone estTime = TimeZone.getTimeZone("EST"); gmtFormat.setTimeZone(estTime); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); sdf.setTimeZone(TimeZone.getTimeZone("GMT")); System.out.println("EST Time: " + gmtFormat.format(sdf.parse("20140508063630"))); } catch (ParseException e) { e.printStackTrace(); } 

既然您已经标记了java-time的问题,那么您应该得到一个java.time答案。

  String dateAndTime = "20140508063630"; DateTimeFormatter parseFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); ZonedDateTime coralHarbourDateTime = LocalDateTime.parse(dateAndTime, parseFormatter) .atOffset(ZoneOffset.UTC) .atZoneSameInstant(ZoneId.of("America/Coral_Harbour")); System.out.println(coralHarbourDateTime); 

这打印

 2014-05-08T01:36:30-05:00[America/Coral_Harbour] 

有很多事情需要注意:

  • 你还标记了你的问题android。 java.time似乎即将推出Android,但截至撰写时,它并不适用于大多数Android手机。 但是, 不要绝望,获得ThreeTenABP并使用Android上的课程。
  • 其他答案中使用的SimpleDateFormatTimeZone类已经过时了,所以如果您的Android应用程序正在处理日期和/或时间和/或时区,我建议使用ThreeTenABP和现代类作为程序员友好和未来的要走的路。
  • 您询问了EST时区,然后给了我们5月8日的日期,这是一年中的夏令时(DST)。 首先,三个字母的缩写是模糊的危险,在这种情况下不是一个完整的时区,所以尽可能避免它们。 我通过使用America / Coral_Harbour解决了这个问题,因为我读到这个特定的地方全年都使用EST,没有夏令时。 如果这不是您的意图,请提供其他位置。 如果我使用美国/蒙特利尔,我得到2014-05-08T02:36:30-04:00[America/Montreal] ,例如,时区偏移-4而不是-5。

更多链接: 如何在Android项目中使用ThreeTenABP

以下代码将转换日期从一个时区转换为另一个具有任何日期格式的时区

 { String parsedDate = null; try { SimpleDateFormat dbDateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); dbDateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); Date date = dbUtcDateFormat.parse("20140508063630"); SimpleDateFormat userDateFormat = new SimpleDateFormat(yyyyMMddHHmmss); userDateFormat.setTimeZone(TimeZone.getTimeZone("EST")); parsedDate = userDateFormat.format(date); } catch (Throwable t) { logger.warn("Date Parse Faied : ", t); } return parsedDate; }