在Java/Scala中,如何以最优雅的方式以最少的代码/秒数获得特定的UTC日期?
更具体地说,我需要:在Java/Scala中,如何以最优雅的方式以最少的代码/秒数获得特定的UTC日期?,java,scala,utc,epoch,aerospike,Java,Scala,Utc,Epoch,Aerospike,更具体地说,我需要: // seconds from Jan 1 2010 val currentAerospikeTime = (new Date().getTime - new Date(110, 0, 1).getTime)/1000; 但是它使用了弃用的Date构造函数,所以我得到了一个警告。但是在Scala中,无法关闭一行的警告(我不想完全关闭它)。那么我如何重写它,使它更简洁,让它在没有警告的情况下编译呢 也许我遗漏了一些东西,但我找不到一个简单的方法来实现它,无论是Java 8
// seconds from Jan 1 2010
val currentAerospikeTime = (new Date().getTime - new Date(110, 0, 1).getTime)/1000;
但是它使用了弃用的Date
构造函数,所以我得到了一个警告。但是在Scala中,无法关闭一行的警告(我不想完全关闭它)。那么我如何重写它,使它更简洁,让它在没有警告的情况下编译呢
也许我遗漏了一些东西,但我找不到一个简单的方法来实现它,无论是Java 8 API还是Joda库(没有彻底研究它,但我也不想只为这一行添加库)。与其在类日期中使用构造函数,不如尝试日历
Calendar.set(year + 1900, month, date);
这是您所寻找的不推荐使用的构造函数的javadoc中推荐的方法。使用如何解决此问题,例如:
ChronoUnit.SECONDS.between(
LocalDate.of(2010, 1, 1).atStartOfDay(ZoneId.of("Z")),
ZonedDateTime.now());
或者,非常简洁:
(System.currentTimeMillis() - 1262304000000L) / 1000;
我建议为此使用新的时间API(基于Joda time):
long diffInSeconds = Duration.between(Instant.parse("2010-01-01T00:00:00Z"), Instant.now()).getSeconds();
我不喜欢日历
解决方案的地方:
- 从何处获取要获取的
实例?你必须确保其中包含的时间(小时、分钟等)也是你想要的时间日历
- 这是旧的API,新的API总是更闪亮;)李>
我不会在那里使用
getSeconds()
方法,而是坚持使用Duration
对象。我刚刚加入它是为了证明你可以得到完全相同的东西(但是对于持续时间来说,imhoDuration
比long
更清晰)
自2010年1月1日起的秒数可由以下公式确定(java 8示例)
对于JodaTime,解决方案类似,只有对象和方法的构造略有不同。这实际上比我的更好,因为它没有将
parse
方法与编码时区'Z'
一起使用,并且在atStartOfDay
中更加明确。在发布问题之前,我尝试用Calendar编写表达式,但它是错误的几行代码实际上是一行代码。不那么简洁。不过还是要谢谢你的意见。第二个显然是赢家。真为我感到羞耻,我自己没有想到这一点。使用.Net时太懒:-)
LocalDateTime jan2010 = LocalDate.of(2010,1,1).atStartOfDay(); // can also pass a ZoneId here
Long secondsSince2010 = Duration.of(jan2010, LocalDateTime.now()).getSeconds();