java.util.date仅获取y-m-d的毫秒数

时间:2017-05-24 14:21:47

标签: java mysql date

情况:有一个Object AuditLog ,其中包含变量java.util.Date date。此对象保存在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>

现在我认为最好的方法是只获得 的毫秒数。

问题:这可以实现相对简单吗?我应该这样做吗?我认为日期因某种数据库操作而被改变,所以适应测试是对的吗?

4 个答案:

答案 0 :(得分:2)

有两种方法可以做到这一点:

  • 使用本地日期:您可以将util eb deploy my_env > deploy_results.txt grep 'update completed successfully' deploy_results.txt 转换为Date,并在两个对象上执行LocalDateassertEquals没有时间,例如:

    LocalDate

  • 使用Apache commons&#39; DateUtils:您可以使用Date input = new Date(); LocalDate date = input.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); System.out.println(date);方法将非日期字段设置为零,例如:

    truncate

    Here's Apache commons库的maven依赖。

答案 1 :(得分:1)

Calendar cal = GregorianCalendar.getInstance();
cal.set(Calendar.YEAR, 2017);
cal.set(Calendar.MONTH, 5 - 1);
cal.set(Calendar.DAY_OF_MONTH, 24);
cal.set(Calendar.MILLISECOND, 0);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
Date d = cal.getTime();
System.out.println(d.getTime());

此代码创建一个仅设置年,月和日的新java.util.Date。这个例子的结果是1495576800000,这就是你想要的。

更短的方式是:

Date d = new Date(0l);
d.setYear(117);
d.setMonth(4);
d.setDate(24);
d.setHours(0);

答案 2 :(得分:1)

您可以使用以下代码获取“日,月,年”:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class Answer {
    public static void main(String args[]) throws ParseException {
        // parse the date and time
        String input = "Wed May 24 15:54:40 CEST 2017";
        SimpleDateFormat parser = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");
        Date date = parser.parse(input);

        // parse just the date
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        formatter.setTimeZone(TimeZone.getTimeZone("CEST"));

        String formattedDate = formatter.format(date);

        Date parsedDate = formatter.parse(formattedDate);

        System.out.println(parsedDate);

        // use https://currentmillis.com/ to check the milliseconds figures
        System.out.println("Wed May 24 15:54:40 CEST 2017 in milliseconds \t" + date.getTime());

        System.out.println("Wed May 24 00:00:00 CEST 2017 in milliseconds \t" + parsedDate.getTime());
     }
 }

第二个SimpleDateFormat(“yyyy-MM-dd”);解析年月日。

使用Date.getTime());得到毫秒。

输出结果为:

Wed May 24 15:54:40 CEST 2017 in milliseconds   1495634080000
Wed May 24 00:00:00 CEST 2017 in milliseconds   1495584000000

1495584000000 = 2017年5月24日星期三00:00:00(使用https://currentmillis.com/

答案 3 :(得分:0)

您应格式化两个日期:

Date date = new Date();
SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd");
dt.format(date);

然后相互比较。