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

如何使用可选的seconds参数创建DateTimeformatter

翟俊名
2023-03-14
问题内容

我正在尝试创建一个DateTimeformatter以验证以下日期时间:

String date1 = "2017-07-06T17:25:28";
String date2 = "2017-07-06T17:25:28.1";
String date3 = "2017-07-06T17:25:28.12";
String date4 = "2017-07-06T17:25:28.123";
String date5 = "2017-07-06T17:25:28.1234";
String date6 = "2017-07-06T17:25:28.12345";
String date7 = "2017-07-06T17:25:28.123456";
String date8 = "2017-07-06T17:25:28.";

我已经尝试使用以下日期时间格式化程序来验证上述日期:

public static final String DATE_TIME_FORMAT_PATTERN = "yyyy-MM-dd'T'HH:mm:ss";
DateTimeFormatter formatter1 = new DateTimeFormatterBuilder()
                                   .appendPattern(DATE_TIME_FORMAT_PATTERN)
                                   .appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, true)
                                   .toFormatter();

它适用于所有上述日期罚款,但根据我的要求就应该失败java.time.format.DateTimeParseExceptiondate8

注意:我知道使用以下格式化程序可以达到预期的结果:

DateTimeFormatter formatter2 = DateTimeFormatter
                       .ofPattern("yyyy-MM-dd'T'HH:mm:ss[.SSSSSS][.SSSSS][.SSSS][.SSS][.SS][.S]");

但是我想知道,通过改变我们可以达到预期的结果formatter1吗?

为了解析日期,我使用以下方法:

LocalDateTime.parse(date1, formatter1);

问题答案:

您必须创建一个可选部分(使用optionalStart()optionalEnd()方法),该部分包含小数点后跟1至6位数字:

String DATE_TIME_FORMAT_PATTERN = "yyyy-MM-dd'T'HH:mm:ss";
DateTimeFormatter formatter1 = new DateTimeFormatterBuilder()
    .appendPattern(DATE_TIME_FORMAT_PATTERN)
    // optional decimal point followed by 1 to 6 digits
    .optionalStart()
    .appendPattern(".")
    .appendFraction(ChronoField.MICRO_OF_SECOND, 1, 6, false)
    .optionalEnd()
    .toFormatter();

这将从解析date1date7并引发java.time.format.DateTimeParseExceptiondate8

这也以相同的方式工作:

String DATE_TIME_FORMAT_PATTERN = "yyyy-MM-dd'T'HH:mm:ss";
DateTimeFormatter formatter1 = new DateTimeFormatterBuilder()
    .appendPattern(DATE_TIME_FORMAT_PATTERN)
    // optional decimal point followed by 1 to 6 digits
    .optionalStart()
    .appendFraction(ChronoField.MICRO_OF_SECOND, 1, 6, true)
    .optionalEnd()
    .toFormatter();


 类似资料:
  • 问题内容: 我有一个带几个参数的Python函数。在某些情况下,可以忽略其中一些参数。 这些参数通过是字符串,每个都有不同的含义。我可以选择要以任何组合形式传递的可选参数,这一点很重要。例如,或,,或,或所有它们(这些是我的选择)。 如果我可以重载该函数,那就太好了-但我读到Python不支持重载。我试图在列表中插入一些必需的int参数-并收到参数不匹配错误。 现在,我正在发送空字符串来代替前几个

  • 问题内容: 在PHP手册中,为了显示具有可选参数的函数的语法,它们在每组相关的可选参数周围使用方括号。例如,对于该功能,手册内容如下: 哪里是可选参数,当留空时,默认为函数的返回值。 在PHP中定义自定义函数时,如何创建像这样的可选参数? 问题答案: 与手册非常相似,在参数的定义中使用等号():

  • 问题内容: 我想制作一个可以使用或不使用参数的装饰器: 在我的代码中,只有使用带参数的decorator才有效:如何使两者同时起作用(带有和不带有参数)? 问题答案: 我找到一个示例,您可以使用或:不错!

  • 我正在尝试使用Intelij模板编写一个自定义setter,但用于Google的Guava Optionals。例如,如果我有一个如下的类: 在Android Studio中使用默认的Setter生成输出: 我想实现的是: 到目前为止,我尝试的是复制Intelij的模板并使用StringUtil。split()以剥离可选的 错误 对我该怎么做有什么建议吗? 默认设置生成Setter的默认模板 我的

  • 问题内容: 我想创建一个可以与参数一起使用的Python装饰器: 或不使用它们(例如,默认情况下将输出重定向到stderr): 那有可能吗? 请注意,我并不是在寻找重定向输出问题的其他解决方案,这只是我想要实现的语法的一个示例。 问题答案: 我知道这个问题很旧,但是有些评论是新的,尽管所有可行的解决方案本质上都是相同的,但大多数解决方案都不是很干净也不易于阅读。 就像thobe的回答所说,处理这两

  • 我已经通读了文档,但这似乎对我不起作用。我跟踪了这个医生。但我不确定这是否与我要做的事情有关,我认为这个文档是用于传递这样的查询- 这是我的目标:api.site.com/test/(optional_field) 因此,如果有人转到“测试”endpoint,它会将可选字段默认为一个参数,但如果他们在那里添加一些内容,它会将其作为输入。 也就是说,这是我的代码: 我想做的是,如果他们只是在没有可选