6

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

4

3 回答 3

9
    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();
        }
于 2014-05-08T05:59:57.243 回答
3

既然您已经标记了您的问题 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 上使用这些类。
  • 其他答案中使用的SimpleDateFormatandTimeZone类早已过时,因此如果您的 Android 应用程序正在使用日期和/或时间和/或时区进行任何工作,我确实推荐 ThreeTenABP 和现代类作为程序员友好和面向未来的方式去。
  • 您询问了 EST 时区,然后给了我们 5 月 8 日的日期,即一年中的夏令时 (DST)。首先,三个字母的缩写很容易模棱两可,在这种情况下不是一个完整的时区,所以尽可能避免使用它们。我通过使用 America/Coral_Harbour 解决了这个问题,因为我读到这个特定的地方全年都使用 EST,没有夏季时间。如果这不是您想要的,请提供其他位置。相反,如果我使用美国/蒙特利尔,2014-05-08T02:36:30-04:00[America/Montreal]例如,我会得到时区偏移 -4 而不是 -5。

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

于 2017-06-15T11:03:18.060 回答
1

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

{   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;
}
于 2014-05-08T06:15:42.450 回答