java.util.date仅获取y-m-d的毫秒数
情况:有一个对象AuditLog,其中包含变量java.util.Date。此对象保存在mySQL数据库中java.util.date仅获取y-m-d的毫秒数,java,mysql,date,Java,Mysql,Date,情况:有一个对象AuditLog,其中包含变量java.util.Date。此对象保存在mySQL数据库中 @Entity public class AuditLog implements Persistable<Long> { ... @Temporal(TemporalType.DATE) private Date date; ... } 因此,您可以看到日期实际上是正确的,但只有y-m-d 然后我尝试了这个(下面)来检查毫秒是否被改变 Asse
@Entity
public class AuditLog implements Persistable<Long> {
...
@Temporal(TemporalType.DATE)
private Date date;
...
}
因此,您可以看到日期实际上是正确的,但只有y-m-d
然后我尝试了这个(下面)来检查毫秒是否被改变
Assert.assertEquals(date.getTime(), log.getDate().getTime());
Output:
expected:<1495634973799> but was:<1495576800000>
Assert.assertEquals(date.getTime(),log.getDate().getTime());
输出:
预期:但是:
现在我认为最好的方法是只获取年月日的毫秒数
问题:这可以相对简单地实现吗?我应该这样做吗?我认为日期会因为某种数据库操作而改变,所以调整测试是可以的,对吗
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);
这段代码创建了一个新的java.util.Date,只设置了年、月和日。本例的结果是1495576800000
,这正是您想要的
较短的方法是:
Date d = new Date(0l);
d.setYear(117);
d.setMonth(4);
d.setDate(24);
d.setHours(0);
您应设置两个日期的格式:
Date date = new Date();
SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd");
dt.format(date);
然后相互比较。您应该设置两个日期的格式:
Date date = new Date();
SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd");
dt.format(date);
然后相互比较。有两种方法:
- 使用本地日期:您可以将util
转换为date
并对这两个对象执行LocalDate
<代码>本地日期没有时间,例如:assertEquals
日期输入=新日期(); LocalDate日期=input.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); 系统输出打印项次(日期)代码>
- 使用Apache commons'DateUtils:您可以使用
方法将非日期字段设置为零,例如:truncate
日期输入=新日期(); Date truncated=DateUtils.truncate(输入,Calendar.Date); System.out.println(截断)代码> Apache commons库的maven依赖项
- 使用本地日期:您可以将util
转换为date
并对这两个对象执行LocalDate
<代码>本地日期没有时间,例如:assertEquals
日期输入=新日期(); LocalDate日期=input.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); 系统输出打印项次(日期)代码>
- 使用Apache commons'DateUtils:您可以使用
方法将非日期字段设置为零,例如:truncate
日期输入=新日期(); Date truncated=DateUtils.truncate(输入,Calendar.Date); System.out.println(截断)代码> Apache commons库的maven依赖项
有两种方法可以做到这一点:
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());
}
}
第二个SimpleDataFormat(“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
149558400000=2017年5月24日星期三00:00:00(使用)您可以使用以下代码获得“仅限日期、月份、年份”:
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”);在年-月-日解析
使用Date.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(使用)好的,我知道了。谢谢好的,我明白了。谢谢这是行不通的。但是
dt.format(date)
返回一个字符串,该字符串等于log.getDate().toString
。这是一种难看的解决方法,尽管您需要以相同的方式从log.getDate()
格式化日期(toString()
不起作用)。有那么难看吗?使用LocalDate
更好,我知道…:-)这不起作用。但是dt.format(date)
返回一个字符串,该字符串等于log.getDate().toString
。这是一种难看的解决方法,尽管您需要以相同的方式从log.getDate()
格式化日期(toString()
不起作用)。有那么难看吗?使用LocalDate
更好,我知道…:-)这将是一个非常好的解决方案,但是assertEquals
失败,因为类型不同java.time.LocalDate,但是was:java.sql.Date
。在调用assertEquals
之前,您需要将这两个日期转换为LocalDate
。这将是一个非常好的解决方案,但是assertEquals
失败,因为类型不同java.time.LocalDate但是was:java.sql.Date
。在调用assertEquals
之前,需要将这两个日期都转换为LocalDate
。请注意,获取Date
对象的y-m-d取决于时区。你首先需要决定你想在哪个时区进行此操作。一旦你确定了一个时区,这将更加容易和自然。考虑升级。哪种类型<代码>日志.GETDATE()>返回> Log.GETDATE返回java. UTILDATE DATEWORD,获得<代码>日期>代码>对象的Y-MD是时区相关的。你首先需要决定你想在哪个时区进行此操作。一旦你确定了一个时区,这将更加容易和自然。考虑升级。哪种类型<代码>日志?GETDATE()<返回> Log.GETDATE返回java. UTILL日期日期