Получить дату из года и день года из значения - Scala - PullRequest
1 голос
/ 08 июня 2019

У меня есть 6-значное значение, из которого я должен получить дату в Scala. Например, если значение равно - 119003, то результат должен быть

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

Выход должен быть 2019/01/03

Я попытался сначала разделить значение, а затем получить дату. Но я не уверен, как поступить, так как я новичок в scala

Ответы [ 2 ]

4 голосов
/ 08 июня 2019

Я думаю, вам придется делать расчеты века вручную. После этого вы можете позволить библиотеке 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
1 голос
/ 08 июня 2019

В классе Date Java 1.0 использовались 1900-летние годы, поэтому 119 будет означать, например, 2019 год. Это использование устарело уже в Java 1.1 более 20 лет назад, поэтому удивительно, что оно сохранилось в 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.

...