【问题标题】:Get date out of year and day of year from a value - Scala从值中获取日期和年份中的日期 - Scala
【发布时间】:2019-06-08 05:13:52
【问题描述】:

我有一个 6 位数的值,我必须从中获取 scala 中的日期。例如,如果值为 - 119003,则输出应为

1=20 century
19=2019 year
003= january 3

输出应该是 2019/01/03

我尝试过先拆分值,然后获取日期。但我不知道如何继续,因为我是 scala 的新手

【问题讨论】:

  • 如果 1 月 3 日是 003 那么 12 月 23 日如何表示? 00 的哪个部分是月份?如果1 表示世纪20 那么0 表示19?而年份1899不能表示?
  • 这是一年中的一天。就像 365 天一样。是的,0 表示 19 和 1899 不能表示
  • 目前我已经设法拆分值。 object stringparse { def main(args: Array[String]): Unit = { val datestring = "119039" val Century = (datestring.slice(0,1)) val year = (datestring.slice(1,3)) val dayofyear = (datestring.slice(3,6)) println(century + "," + year + "," + dayofyear) }
  • 你能教育你的来源使用ISO 8601 format吗?你得到的格式很奇怪,而且解析起来也很复杂。
  • 哈哈是的。但是他们有一个文件是这种格式的。将不得不与他们交谈。

标签: scala datetime user-defined-functions


【解决方案1】:

我认为您必须手动进行世纪计算。之后,您可以让java.time 库完成所有其他工作。

import java.time.LocalDate
import java.time.format.DateTimeFormatter

val in = "119003"
val cent = in.head.asDigit + 19
val res = LocalDate.parse(cent+in.tail, DateTimeFormatter.ofPattern("yyyyDDD"))
                   .format(DateTimeFormatter.ofPattern("yyyy/MM/dd"))
//res: String = 2019/01/03

【讨论】:

    【解决方案2】:

    Java 1.0 的 Date 类使用基于 1900 的年份,因此 119 表示 2019 年。这种用法早在 20 多年前就在 Java 1.1 中被弃用了,所以看到它在 Scala 中存活下来令人惊讶。

    当你说 6 位数值时,我认为它是一个数字(不是字符串)。

    jwvh 的回答是正确的。我的变体是这样的(对不起Java代码,请自己翻译):

        int value = 119003;
        int year1900based = value / 1000;
        int dayOfYear = value % 1000;
        LocalDate date = LocalDate.ofYearDay(year1900based + 1900, dayOfYear);
        System.out.println(date);
    

    2019-01-03

    如果你有一个字符串,我会把它分成两部分,119 和 003(不是你评论中的三部分)。将每个解析为 int 并按上述方式进行。

    如果您需要在输出中使用 2019/01/03 格式,请为此使用 DateTimeFormatter。在您的程序中,请保留LocalDate,而不是String

    【讨论】:

    • 这些是他们希望我们处理的一些非常古老的文件。感谢你的回答。 :)
    猜你喜欢
    • 2020-12-19
    • 2012-05-09
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    相关资源
    最近更新 更多