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

JSR-310-解析可变长度的秒分数

易波涛
2023-03-14
问题内容

有没有一种方法可以创建JSR-310格式器,该格式器能够以可变的秒分数来解析以下两个日期/时间?

2015-05-07 13:20:22.276052

要么

2015-05-07 13:20:22.276

示例代码

DateTimeFormatter formatter
= new java.time.format.DateTimeFormatterBuilder()
        .append( java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") )
        .appendOptional( java.time.format.DateTimeFormatter.ofPattern(".SSSSSS") )
        .toFormatter();
formatter.parse("2015-05-07 13:20:22.276052", LocalDateTime::from);

问题答案:

这样可以解决问题:

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .appendPattern("yyyy-MM-dd HH:mm:ss")
    .appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, true)
    .toFormatter();

System.out.println(LocalDateTime.parse("2015-05-07 13:20:22.276052", formatter));
System.out.println(LocalDateTime.parse("2015-05-07 13:20:22.276", formatter));
System.out.println(LocalDateTime.parse("2015-05-07 13:20:22", formatter));

// output
2015-05-07T13:20:22.276052
2015-05-07T13:20:22.276
2015-05-07T13:20:22

JiriS的答案不正确,因为它使用,appendValue而正确的方法是使用DateTimeFormatterBuilder.appendFraction(它也处理小数点)。差异可以在第二个系统中看到,其中appendValue错误地解析了“2015-05-07T13:20:22.000276”。

LocalDateTime.parse(str,formatter)在大多数情况下,解析时比直接使用格式化程序更整洁。

使用生成器时,请利用appendPattern()optionalStart()保持其整洁。



 类似资料:
  • 问题内容: 您能否说明一下如何为默认系统时区和给定时区获取正确的纪元时间(以毫秒为单位)。 给定 1.时区:GMT + 3 2.以下代码段: 3.输出: 4. System.currentTimeMillis()的 JavaDoc,它指示返回值将是 当前时间与UTC 1970年1月1日午夜之间的差(以毫秒为单位)。 所以为什么 at 的输出与of的输出相同,尽管提及的文档? at 的输出与有所不同

  • 问题内容: 我有一个带有列的表,其中包含如下所示的字符串。 我需要从第二次出现到字符串结尾获取子字符串,并且您可以看到子字符串的长度不是固定的。第一部分并不总是固定的,它可以改变。到目前为止,我正在使用以下代码来实现它。 如您所见,我采用一个任意大的值作为长度来处理可变长度。有更好的方法吗? 问题答案: 您可以与函数结合使用,找到的最后一次出现,还可以使用从字符串末尾获取指定数量的字符。 SQLF

  • 问题内容: 我如何遍历可变长度的Java数组。 我想我会设置一个while循环,但是如何检测到数组末尾。 我想我想要这样的东西[只需要弄清楚如何表示myArray.notEndofArray()] 问题答案: 要么 第二个版本是“ for-each”循环,它适用于数组和Collections。大多数循环可以使用for- each循环完成,因为您可能并不在乎实际的索引。如果您确实关心实际索引,请使用

  • 问题: > 你对Threeten有什么经验?是否存在一些弊端? 与官方的实现相比,该项目的兼容性如何?

  • 2015-05-09 00:10:23.999750900//后9位表示纳秒 当通过模式解析时 YYYY-MM-DD HH:MM:SS.SSSSSSS//9“s”符号 null null 有没有其他方法可以通过只向标准实现提供一个模式来获得正确的解决方案,而不需要任何其他代码修改或字符串操作?

  • 我试图读取一个csv文件,并将其设置为转换为另一种格式,以节省一些工作时间,但当一行的长度小于预期列时,我正在加载它的JTable会引发异常。如果行长度<列长度,是否有方法创建空单元格? 因此,您可以看到getValueAt(int row,int col)方法,如果col超过String[].length将导致错误。