2015-09-22 40 views

回答

4

乔达时间

类似于Reactormonk说,我会建议Joda-Time及其DateTime类。但你不想要getMillis()。你想使用formatting stringyyyyMMdd如下:

new DateTime().toString("yyyyMMdd") 
+1

但这是一个字符串,而不是一个整数,对不对? OP询问一个整数。 –

+1

我不确定这是他需要什么,因为他没有将其格式化为“整数”。如果需要实际的'Integer',那只是'Integer.valueOf(myString)'的问题,其中'myString'被上面显示的代码替换。如果OP请求,我会根据这个更新我的答案。 – childofsoong

1

我会使用乔达时间,那么你可以调用new DateTime().getMillis()

+0

但是,这会返回UTC时间,对不对? – ZhongBot

+0

@ZhongBot“在默认时区中使用ISOChronology构造一个设置为当前系统毫秒时间的实例。” – Reactormonk

0

的答案都不到目前为止似乎护住有关如何获取当前日期为整数问题。这个答案也只使用标准的Java SE API,没有第三方库。

val now = java.time.LocalDate.now 

val dateAsInt = now.getYear * 10000 + now.getMonthValue * 100 + now.getDayOfMonth 
// => dateAsInt: Int = 20150922 
+0

我可能会提到,由于使用scala(如标签所示),OP已经在java上使用了一个库。 – childofsoong

+1

从技术上讲,从Scala的角度来看,Java SE是一个第三方库......但是,至少在长期谈论但从未实现的本地LLVM编译器或被遗弃的.NET编译器完成或Scala之前。JS起飞了,我认为我们可以放心地假设Java SE库(或者至少也存在于Android上的子集)在任何和所有Scala程序中都可用,即使Scala语言规范只保证* Scala *标准的存在图书馆。这些平台托管的语言有点奇怪。 –

+0

非常真实!尽管我不屏住呼吸,但我无法看到Scala放弃了在任何时候完全访问所有JVM库的实用性! – childofsoong

0

Answer by soongAnswer by Jörg W Mittag都很好。但让我们更好地走两步。

我不知道Scala语法,但这里是使用Java语法的代码,内置于Java 8和更高版本中的java.time框架。

时区

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

当省略时区时,您隐式依赖于JVM的当前默认时区。这使得你的代码不太明显,因为你的意图。并且默认值可能因机器或系统管理员而异。更糟糕的是,默认时区可以在运行时随时通过JVM中运行的任何应用程序的任何线程中的任何代码进行更改。

ZoneId zoneId = ZoneId.of("America/Montreal"); 
ZonedDateTime zdt = ZonedDateTime.now(zoneId); 

格式化程序

的java.time框架有一个预定义的格式,DateTimeFormatter.BASIC_ISO_DATE,我们需要为这个目的。

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));