有没有办法在不使用Java类import java.text.SimpleDateFormat
和import java.util.Date
的情况下在Scala中获取当前日期?
答案 0 :(得分:4)
您不应导入java.text.SimpleDateFormat
或java.util.Date
。那些麻烦的旧类现在已经遗留下来,取而代之的是 java.time 类。
虽然我不知道Scala语法,但这里是Java语法。
java.time.Instant.now() // Current moment in UTC, with a resolution of nanoseconds.
...和...
java.time.ZonedDateTime.now( ZoneId.of( "Africa/Tunis" ) ) // Current moment adjusted to the wall-clock time as used by the people in a particular region (time zone).
...和...
java.time.LocalDate.now( ZoneId.of( "Pacific/Auckland" ) ) // Current date (date-only, no time-of-day nor zone) of the people in a particular region (time zone).
答案 1 :(得分:1)
http://pavkin.ru/cross-platform-polymorphic-datetime-values-in-scala-with-type-classes/
目标 没有目标就没有解决方案。精确的目标也将为本文中的推理提供正确的背景。所以让我说明一下。
我的主要目标是能够编写跨日期/时间值的跨平台代码,并支持全时区。
这也意味着我需要在JVM和浏览器中表现一致的实现。我们是Scala程序员,所以让我们选择JVM行为语义作为我们的第二个目标。
本文探讨的选项是
https://github.com/scala-js/scala-js-java-time
此库是跨平台日期/时间代码的未来。它实际上是Java 8时间,从头开始为ScalaJS编写。
在撰写本文时,scala-js-java-time已经提供了LocalTime,LocalDate,Duration和一些其他真正有用的java.time。*类(这里有完整列表)。
https://github.com/soc/scala-java-time
Scala Java-Time是ThreeTen backport项目的一个分支。所以它的主要目的是在Java 6和Java 6上提供类似java.time。*的功能。 7。
它也被编译为ScalaJS,这意味着我们可以用它编写跨平台代码。我们甚至可以使用(在某种程度上)LocalDateTime!
https://github.com/mdedetrich/soda-time
苏打时间是Joda到ScalaJS的一个端口。
它处于早期开发阶段,并且在ScalaJS中也没有时区,但我仍然将它添加到列表中,因为开发人员采用了一种有趣的方法:他们正在使用ScalaGen转换原始的Joda代码。
然后作者建议在撰写本文时(2016年11月11日发布)
没有全时区支持的跨平台库。而对于JavaScript运行时,只有MomentJS,它真的符合我们的要求。
因此,除非其中一个已经进化,或者您只需要一个日期时间函数的子集,或者另一个解决方案已经提出它的头,您可能无法在所需的行为上实现某种接口,并交换它根据你是使用java还是scalajs。
答案 2 :(得分:0)
嗯,目前还不清楚 - 除了关于Basil提到的新课程的暗示 - 为什么你会这样做,需要这个。
在类似unix的系统上,您可以使用系统日期,可能也在Windows系统上,但语法相同?您可能松散了系统独立性:
scala> import sys.process._
import sys.process._
scala> "date".!
Mi 31. Jan 07:09:04 CET 2018
res150: Int = 0
如果您有数据库,这些通常也会提供日期/时间。
然后你可以尝试通过TCP / IP获取日期。
所有这些解决方案在所有情况下都不如使用较新的Java类甚至是较旧的Java类。