继续从堆栈溢出问题Java程序,以获得当前日期没有时间戳:

获得Date对象而不包含时间的最有效方法是什么?除了这两种,还有别的办法吗?

// Method 1
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dateWithoutTime = sdf.parse(sdf.format(new Date()));

// Method 2
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
dateWithoutTime = cal.getTime();

更新:

我知道Joda-Time;我只是试图避免额外的库为这样一个简单的(我认为)任务。但根据目前的回答,Joda-Time似乎非常受欢迎,所以我可能会考虑一下。 通过高效,我的意思是我想避免像方法1所使用的那样创建临时对象字符串,同时方法2似乎是一种hack而不是解决方案。


当前回答

我们可以使用SimpleDateFormat将日期格式化为我们喜欢的格式。下面是一个工作示例:-

SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
System.out.println(dateFormat.format(new Date())); //data can be inserted in this format function

输出:

15/06/2021

其他回答

最直接的方法:

long millisInDay = 60 * 60 * 24 * 1000;
long currentTime = new Date().getTime();
long dateOnly = (currentTime / millisInDay) * millisInDay;
Date clearDate = new Date(dateOnly);

对于标准java运行时中的date例程,谈论没有时间戳的日期是没有意义的,因为它实际上映射到特定的毫秒而不是日期。所述毫秒本质上有一个时间附加到它,这使得它容易受到时区问题,如日光节约时间和其他日历调整。看看为什么这两次减去(1927年)会得到一个奇怪的结果?举个有趣的例子。

如果您希望使用日期而不是毫秒,则需要使用其他东西。对于Java 8,有一组新的方法可以提供您想要的东西。对于Java 7及更早版本,请使用http://www.joda.org/joda-time/

如果你想要的只是看到像“YYYY-MM-DD”这样的日期,而没有其他乱七八糟的东西。“Thu May 21 12:08:18 EDT 2015”然后使用java.sql.Date。下面的例子获取当前日期:

new java.sql.Date(System.currentTimeMillis());

java.sql.Date也是java.util.Date的子类。

如果你只需要当前日期,不需要时间,另一种选择是:

DateTime.now().withTimeAtStartOfDay()

你可以利用joda时间。

private Date dateWitoutTime(Date date){
 return new LocalDate(date).toDate()
}

你打电话说:

Date date = new Date();
System.out.println("Without Time = " + dateWitoutTime(date) + "/n  With time = " + date);