java - LocalDate epochDay 格式为休息一天

标签 java kotlin

我正在尝试使用 Java8 的 LocalDate api 将日期字符串转换为纪元日。 当我尝试验证转换时,实际上休息了一天!

这是测试

const val DATE_PATTERN = "MMMM d, yyyy"
    @Test
    fun `parse handles different cases`(){
        val case1 = "September 31, 2018"
        val dateTimeFormatter = DateTimeFormatter.ofPattern(DATE_PATTERN, Locale("en", "US"))
        val date1: Long = LocalDate.parse(case1, dateTimeFormatter).toEpochDay()
        val case1Res = LocalDate.ofEpochDay(date1).format(dateTimeFormatter)
        assertEquals(case1, case1Res)
     }

断言失败

expected: <September 31, 2018> but was: <September 30, 2018>

最佳答案

评论指出,9月确实有30天。此代码在解析不正确的日期时不会引发错误的原因是,DateFormatter 默认情况下是宽松的,这意味着您可以在 2018 年 9 月 64 日通过,它会很乐意为您解析它并生成正确的纪元日期。

您可以通过添加严格的解析器样式使 DateFormatter 在不正确的日期上抛出错误,如下所示:

DateTimeFormatter
    .ofPattern(DATE_PATTERN, Locale("en", "US"))
    .withResolverStyle(ResolverStyle.STRICT)

这将导致解析指定日期时出现以下错误:

无法解析文本“2018 年 9 月 31 日”:无法从 TemporalAccessor 获取 LocalDate:{YearOfEra=2018,MonthOfYear=9,DayOfMonth=31},类型为 java.time.format.Parsed

关于java - LocalDate epochDay 格式为休息一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52978589/

相关文章:

Java 泛型 : why someObject. getClass() 不返回 Class<?延伸 T>?

java - 通过添加/减去相应的值来合并 map

java - 学习 Maven 的最快方法

java - 如何正确解决 hashCode 和 equals 上的 "Design For Extension"CheckStyle 警告

java - 启动两个 Junit 测试套件

android - 使用 kotlin 在 android studio 中创建按钮

spring-boot - 无法使用 Kotlin 和 @AutoConfigureMockMvc 检测测试类的默认配置类

generics - 使用泛型获取列表类,例如:List<Number>::class

java - 如何在没有初始化和特定数量元素的情况下在 Kotlin 中创建对象数组?

java - Android 版 Kotlin : OnItemSelected Listener