Java程序获取没有时间戳的当前日期

我需要一个Java程序来获取没有时间戳当前日期

Date d = new Date(); 

给我日期和时间戳。

但我只需要日期,没有时间戳。 我使用此日期与另一个没有时间戳的日期对象进行比较。

在印刷上

 System.out.println("Current Date : " + d) 

它应该打印May 11 2010 - 00:00:00

java.util.Date对象一种时间戳 – 它包含自1970年1月1日00:00:00 UTC以来的毫秒数。 因此,您无法使用标准Date对象只包含一天/月/年,没有时间。

据我所知,通过仅在标准Java API中考虑日期(而不是时间)来比较日期并不是一种非常简单的方法。 您可以使用class级Calendar并清除小时,分钟,秒和毫秒:

 Calendar cal = Calendar.getInstance(); cal.clear(Calendar.HOUR_OF_DAY); cal.clear(Calendar.AM_PM); cal.clear(Calendar.MINUTE); cal.clear(Calendar.SECOND); cal.clear(Calendar.MILLISECOND); 

对包含要与其进行比较的日期的另一个Calendar对象执行相同操作,并使用after()before()方法进行比较。

正如java.util.Calendar.clear(int field)的Javadoc中所解释的那样:

HOUR_OF_DAYHOURAM_PM字段是独立处理的,并且应用了时间的解析规则。 清除其中一个字段不会重置此日历的小时值。 使用set(Calendar.HOUR_OF_DAY,0)重置小时值。

编辑 – 上面的答案是从2010年开始; 在Java 8中, java.time包中有一个新的日期和时间API,它比旧的java.util.Datejava.util.Calendar类更强大,更有用。 使用新的日期和时间类而不是旧的。

你总是可以使用apache commons的DateUtils类。 它具有静态方法isSameDay() ,其中“检查两个日期对象是否在同一天忽略时间”。

 static boolean isSameDay(Date date1, Date date2) 

使用DateFormat来解决此问题:

 DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); DateFormat dateFormat2 = new SimpleDateFormat("MM-dd-yyyy"); print(dateFormat.format(new Date()); // will print like 2014-02-20 print(dateFormat2.format(new Date()); // will print like 02-20-2014 

我做了如下工作:(当前日期没有时间戳)

 SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy"); Date today = dateFormat.parse(dateFormat.format(new Date())); 

你可以在这个日期前得到:

 DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); print(dateFormat.format(new Date()); 

你可以用

 // Format a string containing a date. import java.util.Calendar; import java.util.GregorianCalendar; import static java.util.Calendar.*; Calendar c = GregorianCalendar.getInstance(); String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c); // -> s == "Duke's Birthday: May 23, 1995" 

查看Formatter API文档 。

  DateFormat dateFormat = new SimpleDateFormat("MMMM dd yyyy"); java.util.Date date = new java.util.Date(); System.out.println("Current Date : " + dateFormat.format(date)); 

你也可以使用apache commons lib DateUtils.truncate()

 Date now = new Date(); Date truncated = DateUtils.truncate(now, Calendar.DAY_OF_MONTH); 

时间将设置为00:00:00因此您可以使用此日期或打印格式化:

 DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(dateFormat.format(now); // 2010-05-11 11:32:47 System.out.println(dateFormat.format(truncated); // 2010-05-11 00:00:00 
 private static final DateFormat df1 = new SimpleDateFormat("yyyyMMdd"); private static Date NOW = new Date(); static { try { NOW = df1.parse(df1.format(new Date())); } catch (ParseException e) { e.printStackTrace(); } } 

Jesper接受的答案是正确的,但现在已经过时了。 众所周知,java.util.Date和.Calendar类很麻烦。 避免他们。

java.time

而是使用内置于Java 8及更高版本的java.time框架, 后端移植到Java 6和7,并进一步适应Android 。

如果您真的不关心时间和时区,请在java.time框架()中使用LocalDate

 LocalDate localDate = LocalDate.of( 2014 , 5 , 6 ); 

请注意,如果您有任何机会需要处理其他时区或UTC,这是错误的方法。 天真的程序员往往认为他们实际上并不需要时区。

调用toString以标准ISO 8601格式生成字符串。

 String output = localDate.toString(); 

2014年5月6日

对于其他格式,请搜索DateTimeFormatter类的Stack Overflow。

乔达时间

虽然现在被java.time取代,但您可以在Joda-Time库中使用类似的LocalDate类(java.time的灵感)。

 LocalDate localDate = new LocalDate( 2014, 5, 6 ); 

我认为这会奏效。 使用日历来操作时间字段(将它们重置为零),然后从日历中获取日期。

 Calendar c = GregorianCalendar.getInstance(); c.clear( Calendar.HOUR_OF_DAY ); c.clear( Calendar.MINUTE ); c.clear( Calendar.SECOND ); c.clear( Calendar.MILLISECOND ); Date today = c.getTime(); 

或者反其道而行之。 将您要比较的日期放在日历中并比较日历日期

 Date compareToDate; // assume this is set before going in. Calendar today = GregorianCalendar.getInstance(); Calendar compareTo = GregorianCalendar.getInstance(); compareTo.setTime( compareToDate ); if( today.get( Calendar.YEAR ) == compareTo.get( Calendar.YEAR ) && today.get( Calendar.DAY_OF_YEAR ) == compareTo.get( Calendar.DAY_OF_YEAR ) ) { // They are the same day! } 

这是一种在没有额外依赖性的情况下快速完成任务的不雅方式。
您可以使用java.sql.Date,它扩展了java.util.Date,但是对于比较,您必须比较字符串。

 java.sql.Date dt1 = new java.sql.Date(System.currentTimeMillis()); String dt1Text = dt1.toString(); System.out.println("Current Date1 : " + dt1Text); Thread.sleep(2000); java.sql.Date dt2 = new java.sql.Date(System.currentTimeMillis()); String dt2Text = dt2.toString(); System.out.println("Current Date2 : " + dt2Text); boolean dateResult = dt1.equals(dt2); System.out.println("Date comparison is " + dateResult); boolean stringResult = dt1Text.equals(dt2Text); System.out.println("String comparison is " + stringResult); 

输出:

当前日期1:2010-05-10
当前日期2:2010-05-10
日期比较是错误的
字符串比较是真的

如果您真的想使用日期代替日历进行比较,那么这是您可以使用的最短代码:

 Calendar c = Calendar.getInstance(); Date d = new GregorianCalendar(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)).getTime(); 

这样,您可以确保小时/分钟/秒/毫秒值为空。

我做了如下工作:

 calendar1.set(Calendar.HOUR_OF_DAY, 0); calendar1.set(Calendar.AM_PM, 0); calendar1.set(Calendar.HOUR, 0); calendar1.set(Calendar.MINUTE, 0); calendar1.set(Calendar.SECOND, 0); calendar1.set(Calendar.MILLISECOND, 0); Date date1 = calendar1.getTime(); // Convert it to date 

对要比较的其他实例执行此操作。 这个逻辑对我有用; 我必须比较它们是否相等的日期,但你可以做不同的比较(之前,之后,等于等)

我正在寻找相同的解决方案,以下工作对我有用。

  Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.clear(Calendar.HOUR); calendar.clear(Calendar.MINUTE); calendar.clear(Calendar.SECOND); calendar.clear(Calendar.MILLISECOND); Date today = calendar.getTime(); 

请注意,我使用calendar.set(Calendar.HOUR_OF_DAY,0)代替HOUR_OF_DAY而不是使用clear方法,因为它在Calendar.clear方法的javadocs中建议如下

HOUR_OF_DAY,HOUR和AM_PM字段是独立处理的,并且应用了时间的解析规则。 清除其中一个字段不会重置此日历的小时值。 使用set(Calendar.HOUR_OF_DAY,0)重置小时值。

通过上面发布的解决方案,我输出为

 Wed Sep 11 00:00:00 EDT 2013 

使用HOUR_OF_DAY的清除方法在12点之后执行小时,在12点之后执行,或者在12点之前执行时重置00。

这是我的获取日期的代码:

 Calendar c=Calendar.getInstance(); DateFormat dm = new SimpleDateFormat("dd/MM/yyyy"); java.util.Date date = new java.util.Date(); System.out.println("current date is : " + dm.format(date)); 

这是完整的示例。但是你必须将Sting转换回Date。

 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; //TODO OutPut should LIKE in this format MM dd yyyy HH:mm:ss.SSSSSS public class TestDateExample { public static void main(String args[]) throws ParseException { SimpleDateFormat changeFormat = new SimpleDateFormat("MM dd yyyy HH:mm:ss.SSSSSS"); Date thisDate = new Date();//changeFormat.parse("10 07 2012"); System.out.println("Current Date : " + thisDate); changeFormat.format(thisDate); System.out.println("----------------------------"); System.out.println("After applying formating :"); String strDateOutput = changeFormat.format(thisDate); System.out.println(strDateOutput); } } 

Eaxmple