mysql java。util。仅ymd的日期获取毫秒数
情况:有一个对象AuditLog,它包含变量java。util。日期。此对象保存在mySQL数据库中
@Entity
public class AuditLog implements Persistable<Long> {
...
@Temporal(TemporalType.DATE)
private Date date;
...
}
我正在编写一些JUnit测试,需要验证保存的日期是否等于实际日期。其中date
是在保存并再次加载之前实际传递给log
对象的值的本地副本
Assert.assertEquals(date, log.getDate());
Output:
expected:<Wed May 24 15:54:40 CEST 2017> but was:<2017-05-24>
因此,您可以看到日期实际上是正确的,但只有y-m-d 然后我尝试了这个(下面)来检查毫秒是否被改变
Assert.assertEquals(date.getTime(), log.getDate().getTime());
Output:
expected:<1495634973799> but was:<1495576800000>
现在我认为最好的方法是只获取年月日的毫秒数
问题:这可以相对简单地实现吗?我应该这样做吗?我认为日期会因为某种数据库操作而改变,所以调整测试可以吗
# 1 楼答案
您应设置两个日期的格式:
然后互相比较
# 2 楼答案
这段代码创建了一个新的java。util。仅设置年、月和日的日期。这个例子的结果是
1495576800000
,这是您想要的较短的方法是:
# 3 楼答案
您可以使用以下代码获取“仅限日、月、年”:
第二种简单格式(“yyyy-MM-dd”);在年-月-日解析
使用日期。getTime());以获取毫秒数
输出为:
149558400000=2017年5月24日星期三00:00:00(使用https://currentmillis.com/)
# 4 楼答案
有两种方法可以做到这一点:
使用本地日期:您可以将两个对象上的util
Date
转换为LocalDate
和doassertEquals
LocalDate
没有时间,例如:Date input = new Date(); LocalDate date = input.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); System.out.println(date);
使用Apache commons'DateUtils:您可以使用
truncate
方法将非日期字段设置为零,例如:Date input = new Date(); Date truncated = DateUtils.truncate(input, Calendar.DATE); System.out.println(truncated);
Here'sApache commons库的maven依赖项