Datetime 什么';在Scala中处理日期和时间的标准方法是什么?我应该使用Java类型还是有本机Scala替代品?

Datetime 什么';在Scala中处理日期和时间的标准方法是什么?我应该使用Java类型还是有本机Scala替代品?,datetime,scala,jodatime,Datetime,Scala,Jodatime,在Scala中处理日期和时间的标准方法是什么?我应该使用Java.util.Date之类的Java类型,还是有本机的Scala替代品?从Java SE 8开始,用户被要求迁移到Java.time(JSR-310)。有人在创建scala库时为scala包装java.time,例如。如果目标值低于SE 8,则使用以下选项之一。也看到 列出了许多流行的Scala日期时间API 。这个项目是从scala time派生出来的,因为scala time似乎不再被维护 import com.github.n

在Scala中处理日期和时间的标准方法是什么?我应该使用Java.util.Date之类的Java类型,还是有本机的Scala替代品?

从Java SE 8开始,用户被要求迁移到Java.time(JSR-310)。有人在创建scala库时为scala包装java.time,例如。如果目标值低于SE 8,则使用以下选项之一。也看到

列出了许多流行的Scala日期时间API


。这个项目是从scala time派生出来的,因为scala time似乎不再被维护

import com.github.nscala_time.time.Imports._

DateTime.now // returns org.joda.time.DateTime = 2009-04-27T13:25:42.659-07:00

DateTime.now.hour(2).minute(45).second(10) // returns org.joda.time.DateTime = 2009-04-27T02:45:10.313-07:00

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
import com.github.nscala\u time.time.Imports_
DateTime.now//returns org.joda.time.DateTime=2009-04-27T13:25:42.659-07:00
DateTime.now.hour(2).min(45).second(10)//返回org.joda.time.DateTime=2009-04-27T02:45:10.313-07:00
DateTime.now+2.months//returns org.joda.time.DateTime=2009-06-27T13:25:59.195-07:00
DateTime.nextMonth2009-04-27T13:47:14.840/2009-04-28813:47:14.840
(DateTime.now到DateTime.nextSecond).millis//返回Long=1000
2小时+45分+10秒
//返回com.github.nscala\u time.time.DurationBuilder
//(可以用作持续时间或期间)
(2小时+45分钟+10秒)毫秒
//返回Long=9910000
2.5个月+3.5天
//重现期
是一个很好的Java库,有一个Scala包装器/隐式转换库,可供Joda在创建时使用。(注意隐式操作会对性能造成影响,但这取决于您是否会注意到所做的操作。如果遇到性能问题,您可以返回到Joda接口)

自述文件:

USAGE:
  import org.scala_tools.time.Imports._

  DateTime.now
  // returns org.joda.time.DateTime = 2009-04-27T13:25:42.659-07:00

  DateTime.now.hour(2).minute(45).second(10)
  // returns org.joda.time.DateTime = 2009-04-27T02:45:10.313-07:00

  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 org.scala_tools.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
用法:
导入org.scala_tools.time.Imports_
DateTime.now
//返回org.joda.time.DateTime=2009-04-27T13:25:42.659-07:00
DateTime.now.hour(2)、minute(45)、second(10)
//返回org.joda.time.DateTime=2009-04-27T02:45:10.313-07:00
DateTime.now+2.0个月
//返回org.joda.time.DateTime=2009-06-27T13:25:59.195-07:00
DateTime.nextMonth
动机:

Java日期和日历库在很大程度上是不足的。它们是可变的, 线程不安全,使用非常不方便

Joda时间库是Java日期和日历的绝佳替代品 上课。默认情况下,它们是不可变的,具有更丰富、更好的API,并且 可以在必要时轻松地转换为Java的日期和日历类

这个项目在Joda时代提供了一层薄薄的便利 库,使它们更易于在Scala中使用


(复制自)

每个人都使用JodaTime,这些Scala助手/包装器库可能需要使用新版本的Scala重新编译。Jodatime是唯一一个已经存在很长时间的时间库,它稳定并且可以可靠地与Scala的每个版本一起工作。

如果您使用的是Java 8,那么就不需要再使用
nscala
。Joda时间库已在
Java.Time
包(JSR-310)下移动到Java8中。只需将该包导入Scala项目。

在Scala中没有处理日期的标准方法。可供选择的方案有:

  • 使用java.time(如果您使用的是Java8),因为它内置了最好的JODA时间。没有暗示
  • 使用nscala时间
  • 南丫岛日期图书馆(现场相对较新的图书馆)

  • 我会避免使用java.util.Date,因为它有很多相关的问题。

    Video scalaj:java库的惯用Scala包装器谢谢,我不知道这个包装器。我无法从中获得格式化输出。如果我使用DateTime.formatted(“yyyyMMdd”),我只会得到简单的“yyyyMMdd”(字母不替换为相应的数字)作为响应。如果我使用DateTime.formatted(DateTimeFormat.forPattern(“yyyyMMdd”)—我会收到一个请求字符串参数的错误。由于scala时间似乎不再被维护,它已被nscala时间取代(与scala时间在scala 2.10中的工作方式不同)。可以在中找到它。无法找出其
    导入
    scala.concurrent.duration的问题。\uu
    。用普通的JodaTime代替,并在上面写上自己的自行车。这不是真的。切换到Java-8=>两个不同的API时,必须迁移/调整Joda时间代码!