我有一个日期字符串和一个日期间隔,我想在Scala中将其添加到该日期,但是我不知道该怎么做(最好不使用Java Calendar
)!
类似这样的东西:
val d1 = new SimpleDateFormat("YYYY-MM-DD").parse("1999-12-01")
val d2 = ??? // 1 Year interval
d1 + d2
答案 0 :(得分:3)
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)。”
java.time
。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。答案 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
干杯。