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

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

谭翔
2023-03-14

我有输入日期为"2020-10-31T00:00:00Z"。我想解析这个日期以获得长毫秒。注意:转换的毫秒应为悉尼时间(即GMT 11)。

仅供参考,

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,使用历元转换器给出日期为2019年10月30日,但在输入中,我将31号作为日期。有人能澄清一下吗?

共有1个答案

喻元龙
2023-03-14

通过执行df.setTimeZone(TimeZone.getTimeZone("GMT 11"));,您要求日期格式化程序解释GMT 11时区中的字符串。但是,不应在该时区中解释字符串。看到字符串中的Z了吗?代表GMT时区,所以你应该这样做:

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

事实上,您的字符串是ISO 8601格式的即时(如果您愿意,也可以是“时间点”)。因此,您可以使用Instant来解析它。解析,并使用toEpochMilli获取毫秒数:

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

警告:如果Java 8 API(即Instant等)可用,则不应再真正使用SimpleDataFormat。即使它们不是,你也应该使用NodaTime或类似的东西。

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

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

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

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

  • 问题 你的应用程序接受字符串格式的输入,但是你想将它们转换为 datetime 对象以便在上面执行非字符串操作。 解决方案 使用Python的标准模块 datetime 可以很容易的解决这个问题。比如: >>> from datetime import datetime >>> text = '2012-09-20' >>> y = datetime.strptime(text, '%Y-%m-%

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