在Scala中添加两个日期变量

时间:2018-09-11 13:22:04

标签: scala date

我有一个日期字符串和一个日期间隔,我想在Scala中将其添加到该日期,但是我不知道该怎么做(最好不使用Java Calendar)!

类似这样的东西:

val d1 = new SimpleDateFormat("YYYY-MM-DD").parse("1999-12-01")
val d2 = ??? // 1 Year interval
d1 + d2

4 个答案:

答案 0 :(得分:3)

java.time

    LocalDate d1 = LocalDate.parse("1999-12-01");
    Period p2 = Period.ofYears(1);

    LocalDate oneYearLater = d1.plus(p2);
    System.out.println(oneYearLater);

此代码段的输出为:

  

2000-12-01

很抱歉,我无法编写Scala代码。我相信您可以从Java翻译。

只要您至少基于Java 8,就不需要外部库。对于Java 6和7,使用相同的代码,仅将ThreeTen Backport库添加到您的项目中,然后从org.threeten.bp包中导入。对于Java 5 Joda-Time是一个很好的解决方案,请参见其他答案。

java.time和ThreeTen Backport都是由开发Joda-Time的同一个人开发的,并从那里汲取了良好(以及少数贫困)的经验。 Joda-Time现在处于维护模式。 Joda-Time主页说:“请注意,Joda-Time被认为是一个很大的“完成”项目。没有计划进行重大增强。如果使用Java SE 8,请迁移到java.time(JSR-310)。”

链接

答案 1 :(得分:2)

最好使用joda日期,而不要使用“ vanilla” java:

import org.joda.time.DateTime

val d1 = DateTime.parse("1999-12-01")
val d2 = d1.plusYears(1)

答案 2 :(得分:1)

不需要外部依赖项。您可以使用java.time.LocalDate

import java.time.LocalDate

val date1 = LocalDate.parse("1999-12-01")
val date2 = date1.plusYears(1)

答案 3 :(得分:0)

如前所述,您可以使用Java提供的API。但是,如果需要更像Scala的库,则可以使用https://github.com/nscala-time/nscala-time,它是JodaTime的包装器。 一些例子:

DateTime.now() + 2.months // returns org.joda.time.DateTime = 2009-06-27T13:25:59.195-07:00

DateTime.nextMonth < DateTime.now() + 2.months // returns Boolean = true

DateTime.now() to DateTime.tomorrow  // return org.joda.time.Interval = > 2009-04-27T13:47:14.840/2009-04-28T13:47:14.840

(DateTime.now() to DateTime.nextSecond).millis // returns Long = 1000

2.hours + 45.minutes + 10.seconds // returns com.github.nscala_time.time.DurationBuilder
// (can be used as a Duration or as a Period)

(2.hours + 45.minutes + 10.seconds).millis // returns Long = 9910000

2.months + 3.days // returns Period

干杯。