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

时间:2010-05-10 20:49:11

标签: java

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

Date d = new Date();

给我日期和时间戳。

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

打印时

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

的d应打印May 11 2010 - 00:00:00

17 个答案:

答案 0 :(得分:37)

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

据我所知,通过仅在标准Java API中考虑日期(而不是时间)来比较日期并不是一种非常简单的方法。您可以使用类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_DAY HOUR AM_PM 字段是独立处理的,并且应用了时间的解析规则。清除其中一个字段不会重置此日历的小时值。使用set(Calendar.HOUR_OF_DAY,0)重置小时值。

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

答案 1 :(得分:11)

您可以随时使用apache commons'DateUtils课程。它有静态方法isSameDay(),“检查两个日期对象是否在同一天忽略时间。”

static boolean isSameDay(Date date1, Date date2) 

答案 2 :(得分:8)

使用 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

答案 3 :(得分:7)

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

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

答案 4 :(得分:4)

您可以使用

// 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 documentation

答案 5 :(得分:4)

你可以按照这个日期:

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

答案 6 :(得分:3)

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

答案 7 :(得分:2)

您也可以使用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

答案 8 :(得分:1)

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

答案 9 :(得分:1)

accepted answer by Jesper是正确的但现在过时了。众所周知,java.util.Date和.Calendar类很麻烦。避免他们。

java.time

而是使用内置于Java 8及更高版本java.timeback-ported to Java 6 & 7中的further adapted to 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取代,但您可以使用LocalDate库中的类似Joda-Time类(java.time的灵感)。

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

答案 10 :(得分:0)

我做了如下工作:

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

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

答案 11 :(得分:0)

这是一种在没有额外依赖性的情况下快速完成任务的不雅方式 您可以使用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
  日期比较是假的   字符串比较是真的

答案 12 :(得分:0)

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

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

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

答案 13 :(得分:0)

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

    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.

答案 14 :(得分:0)

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

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!
}

答案 15 :(得分:0)

以下是我获取日期的代码:

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

答案 16 :(得分:0)

这里有完整的示例。但是您必须将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