在Scala中使用日期和时间的标准方法是什么?我应该使用Java类型还是有本地Scala替代方案? [英] What's the standard way to work with dates and times in Scala? Should I use Java types or there are native Scala alternatives?

查看:180
本文介绍了在Scala中使用日期和时间的标准方法是什么?我应该使用Java类型还是有本地Scala替代方案?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Scala中使用日期和时间的标准方法是什么?我应该使用Java类型,如java.util.Date还是有本地Scala替代方案?

解决方案

从Java SE 8起,用户被要求迁移到java.time(JSR-310)。创建围绕java.time进行scala的scala库,例如 scala-time 。如果瞄准低于SE 8,请使用以下之一。另请参阅为什么JSR-310不是Joda-时间






Joda时间的新Scala包装。这个项目从scala-time开始,因为似乎scala-time不再保持。

  import com.github.nscala_time。 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。现在+ 2.months //返回org.joda.time.DateTime = 2009-06-27T13:25:59.195-07:00

DateTime.nextMonth< DateTime.now + 2.months // return Boolean = true

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

(DateTime.now到DateTime.nextSecond).millis //返回Long = 1000

2.hours + 45.minutes + 10.seconds
//返回com.github.nscala_time.time.DurationBuilder
//(可用作持续时间或作为期间)

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

2.months + 3.days
/ / return Period

Joda时间是一个很好的Java库,有一个Scala包装/隐式转换库可用于Joda时间在 scala-time Jorge Ortiz 创建。 (注意事项有一个性能打击,但这取决于你会做什么,如果你会注意到,如果你遇到一个性能问题,你可以只是恢复到Joda界面)



从README:

  USAGE:
import 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 + 2months
//返回org.joda.time.DateTime = 2009-06-27T13:25:59.195-07:00

DateTime.nextMonth< DateTime.now + 2.months
//返回Boolean = true
DateTime.now到DateTime.tomorrow
//返回org.joda.time.Interval =
// 2009 -04-27T13:47:14.840 / 2009-04-28T13:47:14.840

(DateTime.now到DateTime.nextSecond).millis
//返回Long = 1000

2.hours + 45.minutes + 10.seconds
//返回org.scala_tools.time.DurationBuilder
//(可用作持续时间或作为期间)

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

2.months + 3.days
// return Period


What's the standard way to work with dates and times in Scala? Should I use Java types such as java.util.Date or there are native Scala alternatives?

解决方案

From Java SE 8 onwards, users are asked to migrate to java.time (JSR-310). There are efforts on creating scala libraries wrapping java.time for scala such as scala-time. If targeting lower than SE 8 use one of the below. Also see Why JSR-310 isn't Joda-Time


A new Scala wrapper for Joda Time. This project forked from scala-time since it seems that scala-time is no longer maintained.

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

Joda Time is a good Java library, there is a Scala wrapper / implicit conversion library avaliable for Joda Time at scala-time created by Jorge Ortiz. (Note implicits have a performance hit, but it depends on what you do if you will notice. And if you run into a performance problem you can just revert to the Joda interface)

From the README:

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

这篇关于在Scala中使用日期和时间的标准方法是什么?我应该使用Java类型还是有本地Scala替代方案?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆