当前位置: 首页 > 知识库问答 >
问题:

将“2020-10-31T00:00:00Z”字符串日期转换为长[重复]

赫连开畅
2023-03-14
public static long RegoExpiryDateFormatter(String regoExpiryDate)
    {
        long epoch = 0;

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
        df.setTimeZone(TimeZone.getTimeZone("GMT+11"));
        Date date;
        try {
            date = df.parse(regoExpiryDate);
            epoch = date.getTime();
        } catch (ParseException e) {
            System.out.println("Exception is:" + e.getMessage());
            e.printStackTrace();
        }

        System.out.println("Converted regoExpiryDate Timestamp*************** " + epoch);
        return epoch;
    }

输出:1604062800000,通过使用Epoch转换器给出30/10/2019年的日期,但在输入中,我将31号作为日期传递。有人能澄清一下吗?

共有1个答案

柳德义
2023-03-14

通过执行df.settimezone(timezone.gettimezone(gmt+11“);,您要求日期格式化程序在gmt+11时区解释字符串。但是,不应该在该时区解释字符串。看到字符串中的z了吗?它代表GMT时区,所以您应该这样做:

df.setTimeZone(TimeZone.getTimeZone("GMT"));

实际上,对于即时(如果愿意,也可以是“时间点”),字符串是ISO 8601格式的。因此,您可以使用instant.parse解析它,并使用toepochmilli获取毫秒数:

System.out.println(Instant.parse("2020-10-31T00:00:00Z").toEpochMilli());
// prints 1604102400000

警告:如果Java 8 API(即instant等)可用,就不应该再使用SimpleDateFormat了。即使它们不是,你也应该使用NodaTime或类似的东西。

 类似资料:
  • 我有输入日期为"2020-10-31T00:00:00Z"。我想解析这个日期以获得长毫秒。注意:转换的毫秒应为悉尼时间(即GMT 11)。 仅供参考, 输出:1604062800000,使用历元转换器给出日期为2019年10月30日,但在输入中,我将31号作为日期。有人能澄清一下吗?

  • 我正在从DB获取日期值作为长值。我正在将其转换为字符串以使用解析函数。下面是我的代码 但在执行此代码时,应用程序会崩溃。如果 但我将这个值作为“12302012235”(pzudo值)。 我怎么能这么做? 编辑: 我正在将日期值作为整数保存到数据库。我正在从DB中获取这个值,并将其转换为字符串。这是实际的strDate1值

  • 我的一个软件中有这段代码,我简化了它,并在一个示例java类中重写了它。今天是“2022-04-08”,当我执行此代码时,变量等于,但它应该是。如何解决这个问题?

  • 我需要将一些字符串日期转换为另一种格式的字符串日期 我想按照“yyyy-MM-dd'T'HH:MM:ss.SSSXX”模式获得ISO-8601格式的结果日期字符串 你能帮我实现这个吗?

  • 我刚到爪哇。Postgres db包含日期的格式为。我需要转换为。 我已经试过了,但是显示的结果是错误的

  • 问题内容: 我在字符串中有一个日期,例如“ 2012年12月12日”。如何将其转换为毫秒(长)? 问题答案: 使用SimpleDateFormat