Scala-如何将日期转换为整数

Scala-如何将日期转换为整数,scala,Scala,将日期显示为整数的Scala代码是什么? 例如,今天的日期将以整数显示为: 20150922 我会使用joda time,然后您可以调用new DateTime().getMillis()joda time 与Reactormonk所说的类似,我会推荐它和它的类。但是您不需要getMillis()。您希望按如下方式使用yyyyMMdd: new DateTime().toString("yyyyMMdd") 到目前为止,没有一个答案能够回答您关于如何获得整数形式的当前日期的问题。这个答案也只

将日期显示为整数的Scala代码是什么? 例如,今天的日期将以整数显示为:

20150922

我会使用joda time,然后您可以调用
new DateTime().getMillis()

joda time 与Reactormonk所说的类似,我会推荐它和它的类。但是您不需要
getMillis()
。您希望按如下方式使用
yyyyMMdd

new DateTime().toString("yyyyMMdd")

到目前为止,没有一个答案能够回答您关于如何获得整数形式的当前日期的问题。这个答案也只使用标准的JavaSEAPI,没有第三方库

val now = java.time.LocalDate.now

val dateAsInt = now.getYear * 10000 + now.getMonthValue * 100 + now.getDayOfMonth
// => dateAsInt: Int = 20150922
这个和那个都是好的。但让我们更进一步

我不知道Scala语法,但下面是使用Java语法并将框架内置到Java8和更高版本中的代码

时区 时区对于确定日期至关重要。例如,巴黎新的一天比蒙特勒尔早

省略时区时,您隐式地依赖于JVM的当前默认时区。这使得代码的意图不那么明显。默认值可能因计算机或系统管理员而异。更糟糕的是,在JVM中运行的任何应用程序的任何线程中的任何代码都可以在运行时随时更改默认时区

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.now( zoneId );
使用格式器 time框架有一个预定义的格式,我们需要这个格式

String s = zdt.format( DateTimeFormatter.BASIC_ISO_DATE );  // Ex: '20111203'
Integer i = Integer.valueOf( s );
我当然不建议这样做,但您可以将其串成一行

Integer i = Integer.valueOf( ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ).format( DateTimeFormatter.BASIC_ISO_DATE ) );

您使用的是哪一个日期库?@ZhongBot“在默认时区中使用等时法构造一个实例集,设置为当前系统毫秒时间。”但这是一个字符串,不是整数,对吗?OP要求一个整数。我不确定他需要的是整数,因为他没有将其格式化为
integer
。如果需要实际的
整数
,那只是
Integer.valueOf(myString)
的问题,其中
myString
将替换为上面显示的代码。如果OP提出请求,我会基于此更新我的答案。我可能会提到,由于使用了scala(如标签所示),OP已经在java之上使用了一个库。从技术上讲,从scala的角度来看,java SE是一个第三方库……然而,至少在人们谈论已久但从未实现的本地LLVM编译器或废弃的.NET编译器完成或Scala.JS启动之前,我认为我们可以放心地假设Java SE库(或至少Android上也存在的子集)在任何和所有Scala程序中都可用,尽管Scala语言规范只保证Scala标准库的存在。这些平台托管语言有点奇怪。非常正确!不过,我并没有屏住呼吸——我看不到Scala会在短时间内放弃对所有JVM库的完全访问!正确的。我也是。另一方面,即使没有本机代码的库生态系统,我也可以很高兴地避免使用C而使用Scala;-)如果突然有人在Scala中重新实现底层基础设施,并提出标准库的纯Scala实现(甚至整个运行时系统,GC、JIT等等),我很乐意为他们提供一杯啤酒。一两个。或者十个。我按照宋楚瑜的建议做了new DateTime().toString(“yyyyMMdd”).toInt