Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “无法理解”;YYYY-MM-DDTHH:MM:SS“;日期格式_Java_Simpledateformat - Fatal编程技术网

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

Java “无法理解”;YYYY-MM-DDTHH:MM:SS“;日期格式,java,simpledateformat,Java,Simpledateformat,我正在尝试解析以下日期时间字符串 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");

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

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"

非常感谢您的帮助。

您需要避开文字
T

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:SS");

更新:您的字符串的格式为

yyyy-MM-dd'T'HH:mm:ss.SSS
但您正试图用一个完全大写格式的字符串来解析它


这不符合您的要求,您应该

您需要转义文本
T

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:SS");

更新:您的字符串的格式为

yyyy-MM-dd'T'HH:mm:ss.SSS
但您正试图用一个完全大写格式的字符串来解析它

这不符合您的要求,您应该查看的文档并尝试以下操作:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
请参阅的文档并尝试以下操作:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
这张照片是:

2018-01-30T23:59:59

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

您所使用的日期时间类,
SimpleDateFormat
date
,早已过时,而前者尤其麻烦。我建议您改用
java.time
,现代java日期和时间API。和你一起工作真是太好了

LocalDateTime
是一个带有时间的日期,没有时区或与UTC的偏移量。它的一个参数
parse
方法解析ISO8601,这就是为什么不需要显式格式化程序的原因

你的代码出了什么问题 您的格式模式字符串有许多问题。这就是为什么您应该欣赏没有任何显式格式化程序的上述解决方案的原因之一。第一个错误是:格式模式字符串有一个冒号,
,介于秒和毫秒之间,而日期时间字符串有一个点,
。这就是为什么会出现异常

但是,修复此问题后,您的代码将生成以下日期:

2017年12月31日星期日23:00:00 CET

离预期的时间还有一个月,分秒都不见了。因为:

  • 大写字母
    YYYY
    表示基于周的年份,仅对周数有用。年份需要小写字母
    yyyy
  • 大写
    DD
    表示一年中的某一天。您需要使用小写字母
    dd
    表示月日
  • 您正确使用了月份的大写字母
    MM
    。再尝试几分钟也不行。也许你现在已经猜到了:它是小写的
    mm
  • 毫不奇怪,你需要小写的
    ss
    数秒
  • 使用
    MS
    毫秒是很有趣的
    SimpleDataFormat
    将其作为月份的
    M
    (我们之前已经有过两次),大写的
    S
    表示毫秒。相反,您需要大写的
    SSS
    表示三位毫秒
链接
  • 解释如何使用
    java.time
  • 关于UTC
这张照片是:

2018-01-30T23:59:59

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

您所使用的日期时间类,
SimpleDateFormat
date
,早已过时,而前者尤其麻烦。我建议您改用
java.time
,现代java日期和时间API。和你一起工作真是太好了

LocalDateTime
是一个带有时间的日期,没有时区或与UTC的偏移量。它的一个参数
parse
方法解析ISO8601,这就是为什么不需要显式格式化程序的原因

你的代码出了什么问题 您的格式模式字符串有许多问题。这就是为什么您应该欣赏没有任何显式格式化程序的上述解决方案的原因之一。第一个错误是:格式模式字符串有一个冒号,
,介于秒和毫秒之间,而日期时间字符串有一个点,
。这就是为什么会出现异常

但是,修复此问题后,您的代码将生成以下日期:

2017年12月31日星期日23:00:00 CET

离预期的时间还有一个月,分秒都不见了。因为:

  • 大写字母
    YYYY
    表示基于周的年份,仅对周数有用。年份需要小写字母
    yyyy
  • 大写
    DD
    表示一年中的某一天。您需要使用小写字母
    dd
    表示月日
  • 您正确使用了月份的大写字母
    MM
    。再尝试几分钟也不行。也许你现在已经猜到了:它是小写的
    mm
  • 毫不奇怪,你需要小写的
    ss
    数秒
  • 使用
    MS
    毫秒是很有趣的
    SimpleDataFormat
    将其作为月份的
    M
    (我们之前已经有过两次),大写的
    S
    表示毫秒。相反,您需要大写的
    SSS
    表示三位毫秒
链接
  • 解释如何使用
    java.time
  • 关于UTC

我建议您避免使用
SimpleDateFormat
类。它不仅早已过时,而且还出了名的麻烦。今天我们的生活好多了。您的字符串是ISO 8601,
java中的
LocalDateTime
。time
将在没有任何显式格式设置程序的情况下对其进行解析,因此您在使用格式模式字符串时不会遇到问题。的可能重复。或者,正如您所看到的,可能是的重复。我建议您避免使用
SimpleDateFormat
类。不仅仅是朗