当前位置: 首页 > 面试题库 >

无法理解“ YYYY-MM-DDTHH:MM:SS”日期格式

莫飞翮
2023-03-14
问题内容

我正在尝试解析以下日期时间字符串

2018-01-30T23:59:59.000

我无法理解它是哪种标准格式,例如UTC或ISO_8601

同时以以下方式进行解析:

SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD'T'HH:MM:SS:MS");
        Date date = null;
        try {
            date = sdf.parse("2018-01-30T23:59:59.000");
        } catch (ParseException e) {
            e.printStackTrace();
        }

但是它抛出以下异常:

java.text.ParseException: Unparseable date: "2018-01-30T23:59:59.000"

任何帮助表示赞赏。


问题答案:
    LocalDateTime dateTime = LocalDateTime.parse("2018-01-30T23:59:59.000");
    System.out.println(dateTime);

打印:

2018-01-30T23:59:59

您的字符串为ISO 8601格式。UTC或协调世界时不是一种格式,它是一种标准时间,用于定义我们各自时区中其余时间的使用时间。

您正在使用的日期时间类SimpleDateFormatDate早已过时,尤其是前者特别麻烦。我建议您改为使用java.time现代Java日期和时间API。与之合作真是太好了。

A LocalDateTime是具有一天中的时间,没有时区或与UTC偏移的日期。它的单参数parse方法解析ISO
8601,这就是为什么不需要显式格式化程序的原因。

您的代码出了什么问题

您的格式模式字符串有很多问题。这就是为什么您应该在没有任何显式格式化程序的情况下欣赏上述解决方案的原因之一。出问题的第一件事是:格式模式字符串的冒号:介于秒和毫秒之间,而日期时间的字符串则带有点.。这就是为什么您会得到例外。

但是,解决此问题,您的代码将产生以下结果Date

周日2017年12月31日23:00:00

与预期的日期有一个月的距离,而分钟和秒数也丢失了。因为:

  • 大写字母YYYY是基于星期的年份,仅与星期数一起使用。您需要yyyy一年的小写字母。
  • 大写DD是一年中的一天。您需要dd在每月的某天使用小写字母。
  • 您正确使用大写字母MM表示月份。再尝试几分钟,将无法正常工作。也许您现在可以猜测:它是小写字母mm
  • 毫不奇怪,您需要小写ss几秒钟。
  • 使用MS毫秒很有趣。SimpleDateFormat将其作为M月份(我们已经有过两次),以大写S表示毫秒。取而代之的是,您需要SSS三位毫秒的大写字母。

链接

  • Oracle教程:Date Time解释如何使用java.time
  • 维基百科文章:ISO 8601
  • Wikipedia article: Coordinated Universal Time on UTC


 类似资料:
  • 问题内容: 我正在尝试从转换日期。我已经使用了mktime()函数和其他函数,但是我似乎无法使其工作。我已经成功地将原始日期用作定界符,但更改格式并将其与交换时没有成功。 任何帮助将不胜感激。 问题答案: 通过查看各个组成部分之间的分隔符,可以消除或格式中的日期的歧义:如果该分隔符是斜杠(),则假定为American ;否则,为0。反之,如果分隔符是破折号()或点(),则采用欧洲格式。 使用默认的

  • 我有一个格式为。我希望它的格式为 下面是我尝试进行此转换的示例util: 但是,我得到的输出不是格式。 请告诉我如何将从格式化为

  • 问题内容: 我收到日期这样的字符串:。我写了这样的解析代码 我得到这样的输出: 为什么它读错了?我的代码有问题还是Java无法识别此日期格式? 问题答案: 您的/ 的输入方法错误,用于“小时分钟”和“年度月份” 是用于“毫秒”(或,表示无意义) 我也建议使用,而不是作为是“白天小时(0-23)” 因此,使用… 它为我输出

  • 我从格式为yyyy-mm-dd(加上不需要的hh-mm-ss)的API中获取日期结果。我想在jQuery中将其转换为dd-mm-yyyy格式,最简单/最快的方法是什么? 目前我正在使用:(对于返回的字符串yyyy-mm-dd): 但是好像有点啰嗦。

  • 问题内容: 当我在下面的代码下运行时,出现Unparseable错误。如何将dd MMM yyyy格式转换为dd / MM / yyyy格式? 问题答案: 假设您修复了明显的语法错误,则: 您要做的就是为您需要解析的格式创建一个解析器,并为您想要的格式创建一个格式化器:

  • 问题内容: 如果能找到有关此异常的错误的帮助,我将不胜感激: 和以下代码: 它用引发异常。 ,作为例外。 谢谢。 问题答案: 代表时区字符。需要引用: