@Test
public void testDateTime() {
LocalDateTime expected = LocalDateTime.now().plusDays(1L);
// converter contents
long epochMillis = expected.atZone(ZoneId.systemDefault())
.toInstant().toEpochMilli();
LocalDateTime actual = LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMillis),
TimeZone.getDefault().toZoneId());
assertThat(actual, equalTo(expected));
}
Expected :<2021-06-02T14:06:21.820299>
Actual :<2021-06-02T14:06:21.820>
我可以使用assertthat(actual,equalTo(expected.truncatedto(chronounit.millis))
对expected进行中继,使它们相等,但是,这意味着每次对被测试的转换器类进行比较(isAfter,isBefore,equals),都必须应用中继。
对于JDK 11(或者我可能错过的文档:),是否有适当的方法在localdatetime
到long
之间进行转换,反之亦然?
更新:
public Long localDateTimeToEpochMillis(LocalDateTime ldt) {
Instant instant = ldt.atZone(ZoneId.systemDefault()).toInstant();
return ldt.atZone(ZoneId.systemDefault())
.toInstant().toEpochMilli();
}
public LocalDateTime epochMillisToLocalDateTime(long epochMillis) {
return LocalDateTime.ofInstant(
Instant.ofEpochMilli(epochMillis),
ZoneId.systemDefault());
}
现有的测试似乎验证的是,给定一个长值,我应该得到相同的LocalDateTime等价物,这是通过使用给定的(转换为长值的LocalDateTime)然后返回LocalDateTime进行比较来完成的。
如果你看一下区别:
Expected :<2021-06-02T14:06:21.820299>
Actual :<2021-06-02T14:06:21.820>
你可以看到它移除任何小于毫秒的东西。
发生这种情况是因为您将LocalDateTime
转换为毫秒:
.toInstant().toEpochMilli();
Instant instant=expected.atZone(ZoneId.systemDefault())
.toInstant();
long epochMillis = instant.toEpochMilli();
long nanos=instant.getNano()%1000000;//get nanos of Millisecond
LocalDateTime actual = LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMillis).plusNanos(nanos),
TimeZone.getDefault().toZoneId());
我在使用Java8的java应用程序中工作。 我已经集成了数据库(多个数据库Oracle,MySQL,Postgres)和其中在DB i字符串创建的日期。 DB中的日期格式为-2015-07-29 16:23:28.143 我从DB获取这个,并在Localdatetime对象中设置 所以这里的问题是我不想在响应中显示/发送毫秒。我想显示/发送日期,如2015-07-29 16:23:28 我尝试了
问题内容: 我做了一些研究,但仍然找不到如何得到的日子…这是我得到的: 请帮助,我在数学上很烂,谢谢。 问题答案: 如果您没有另一个大于天的时间间隔: 如果您还有几个星期: 如果可能的话,最好避免使用几个月和几年,因为它们没有明确定义的固定长度。严格来说,两天都没有:夏令时意味着天的长度可以不是24小时。
问题内容: 我想知道如果有一种方法,因为1970年1月1日(时期),以获得当前毫秒使用新的,或Java的8类。 已知的方法如下: 要么 问题答案: 我不能完全确定“当前毫秒”的含义,但我假设这是自“纪元”(即UTC 1970年1月1日午夜)以来的毫秒数。 如果你想找到,因为时代的毫秒数 眼下, 然后用作为nubian菜鸟指出。如果是这样,则没有理由使用任何新的java.time API来执行此操作
问题内容: 我在截断数据时遇到了一些麻烦。我正在使用SQL的GETDATE()函数来获取当前日期和时间,并将它们输入数据库。但是,我只想保存日期和时间直到分钟。换句话说,我希望在输入新数据时保存dd/ mm / yyyy hh:mm:00.000或dd / mm / yyyy hh:mm。我该怎么做呢? 我应该注意我正在使用MS-SQL。 问题答案: 有许多方法可以做到这一点。 例如,您可以将生成
问题内容: 我正在编写一个赛车应用程序,想要将大量毫秒转换为minutes:seconds.milliseconds(例如)。目前,我只是通过数学()进行运算,然后求余数并进一步除法,依此类推,但是我发现它时不时关闭1毫秒。我知道这听起来似乎没什么大不了的,但是我试图找到和的平均值,然后返回,这意味着它输入不正确,而应用程序的其余部分无法处理。 有没有一种方法使用或格式化毫秒到MM或类似的东西:s