有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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>

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

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


共 (4) 个答案

  1. # 1 楼答案

    您应设置两个日期的格式:

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

    然后互相比较

  2. # 2 楼答案

    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。仅设置年、月和日的日期。这个例子的结果是1495576800000,这是您想要的

    较短的方法是:

    Date d = new Date(0l);
    d.setYear(117);
    d.setMonth(4);
    d.setDate(24);
    d.setHours(0);
    
  3. # 3 楼答案

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

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

    第二种简单格式(“yyyy-MM-dd”);在年-月-日解析

    使用日期。getTime());以获取毫秒数

    输出为:

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

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

  4. # 4 楼答案

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

    • 使用本地日期:您可以将两个对象上的utilDate转换为LocalDate和doassertEqualsLocalDate没有时间,例如:

      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依赖项