如何将GMT时间转换为EST时间

6

我有一个日期时间"20140508063630",格式为(yyyyMMddHHmmss)。我想将此时间转换为东部标准时间。我该怎么做?如果有任何API可以进行此转换,请告诉我。谢谢!


可能是答案 http://stackoverflow.com/questions/16313087/how-to-convert-date-and-time-to-est-format-in-android - Syed Waqas
1
可能是时区转换的重复问题。 - Oleg Estekhin
1
有关在Java中转换时区的一般问题和特定时区之间的转换问题,有许多问题和答案。以下是一些问题链接:问题1 问题2 问题3 问题4 - Oleg Estekhin
@OlegEstekhin 所以请投票关闭该问题。 - Basil Bourque
我所做的第一件事。 - Oleg Estekhin
@OlegEstekhin,显然你没有这样做。 "关闭"计数为零(此时...我即将投票关闭)。 你可能点击了“标记”链接而不是“关闭”链接。 - Basil Bourque
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();
        }

1
这不是从GMT转换为EST,这是从我的时区转换为EST..因为你正在创建新的日期,而不是使用我已有的日期。 - Sameer Kazi
1
@Sameer Kazi:我假设我在格林威治标准时间。只是举个例子,我使用了当前日期。用户可以使用任何日期和格式在GMT中。这个答案只是为了解释如何从GMT转换为EST。 - Suren Raju
我将日期字符串(20140508063630)解析为日期,然后使用您的代码。但它似乎没有任何作用。 - Ashish Tiwari
@Ashish Tiwari:我已经编辑了代码。 你能跟上更新后的代码吗? - Suren Raju
@Ashish Tiwari 接受答案吧。 :) - Suren Raju

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上使用这些类。
  • 其他答案中使用的“SimpleDateFormat”和“TimeZone”类已经过时,因此如果您的Android应用程序涉及到日期、时间或时区方面的工作,我建议使用ThreeTenABP和现代类作为程序员友好的方式,以及未来可靠的方式。
  • 您要求东部时间(EST)的时区,并给出了5月8日的日期,这是一年中夏令时(DST)的时间段。首先,三个字母缩写很危险,容易产生歧义,在这种情况下并不能表示完整的时区,尽量避免使用。我通过使用美国/科勒尔港(America/Coral_Harbour)来解决这个问题,因为我读到这个特定的地点全年都使用EST,没有夏令时。如果这不是您想要的,请提供一个不同的位置。如果我使用美国/蒙特利尔(America/Montreal),例如,我会得到2014-05-08T02:36:30-04:00[America/Montreal],时区偏移量为-4而不是-5。

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


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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接