我需要一个Java程序来获得当前日期而没有给时间:Java程序来获得当前的日期没有时间戳
Date d = new Date();
给我的日期和时间戳。
但我只需要日期,没有时间戳。我使用这个日期来比较没有时间戳的另一个日期对象。
上打印
System.out.println("Current Date : " + d)
的d
它应该打印May 11 2010 - 00:00:00
。
我需要一个Java程序来获得当前日期而没有给时间:Java程序来获得当前的日期没有时间戳
Date d = new Date();
给我的日期和时间戳。
但我只需要日期,没有时间戳。我使用这个日期来比较没有时间戳的另一个日期对象。
上打印
System.out.println("Current Date : " + d)
的d
它应该打印May 11 2010 - 00:00:00
。
一个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字段)的的Javadoc:
的HOUR_OF_DAY,HOUR和AM_PM字段独立处理和分辨率适用于一天中的时间规则。清除其中一个字段不会重置此日历的小时数值。使用set(Calendar.HOUR_OF_DAY,0)重置小时值。
编辑 - 上面的答案是从2010年开始的;在Java 8中,包java.time
中有一个新的日期和时间API,它比旧的java.util.Date
和java.util.Calendar
类更加强大和有用。使用新的日期和时间类,而不是旧的。
你可以使用
// 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"
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'DateUtils
类。它具有静态方法isSameDay()
,它“检查两个日期对象是否在同一天忽略时间。”
static boolean isSameDay(Date date1, Date date2)
我读了isSameDay的文档,我不明白它的工作原理。它如何确定一天而不使用时区?有时两个Date实例可以在同一天或不同日期(午夜之前和之后),具体取决于假定的时区。它是否假定系统的默认时区? – 2010-05-10 21:59:03
我不知道它究竟做了什么。你一定要看看源代码。但是,如果您查看Date API,则它会根据当地时区执行所有操作。实际上,与转换到其他时区有关的所有方法都已弃用。所以,Date看起来好像并不真正处理时区。如果您想对时区进行任何操作,请查看日历。 – 2010-05-10 22:23:28
自1970年1月1日00:00:00 GMT以来,内部的日期为毫秒。我希望每天的计算也在GMT。 – ToolmakerSteve 2015-09-06 20:22:33
我认为这会奏效。使用日历处理时间字段(将它们重置为零),然后从日历中获取日期。
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.util.Date的java.sql.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
日期比较假
字符串比较虚
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();
}
}
我做了如下,它的工作:
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
对您想要比较的其他实例执行此操作。这个逻辑对我有用;我不得不日期它们是否相等或无法比较,但你可以做不同的比较(前,后,等于等)
我做了如下,它的工作:(没有时间戳当前日期)
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());
如果你真的想用一个日期,而不是用于比较的日历,这是最短的那一块的代码,你可以使用:
Calendar c = Calendar.getInstance();
Date d = new GregorianCalendar(c.get(Calendar.YEAR),
c.get(Calendar.MONTH),
c.get(Calendar.DAY_OF_MONTH)).getTime();
通过这种方式,您可以确保小时/分钟/秒/毫秒值为空白。
我正在寻找相同的解决方案,以下为我工作。
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而不是使用明确的方法,因为它是在Calendar.clear方法的Javadoc建议,如下
HOUR_OF_DAY,HOUR和AM_PM字段是独立处理的,并且 将应用当天时间的解析规则。清除字段中的一个 不会重置此日历的小时数值。 使用设置(Calendar.HOUR_OF_DAY,0)重置小时值。
利用上述贴溶液I得到输出作为
Wed Sep 11 00:00:00 EDT 2013
使用明确方法,用于在HOUR_OF_DAY 12 12PM之前执行时12PM或00之后执行时重置小时。
使用日期格式来解决这个问题:
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
这是以所需格式获取日期的简单方法。 – Janpan 2014-11-07 08:19:25
的accepted answer by Jesper是正确的,但现在已经过时。 java.util.Date和.Calendar类是非常麻烦的。避免它们。
而是使用java.time框架,内置到Java 8和更高版本,back-ported to Java 6 & 7和further adapted to Android。
如果您真的不关心时间和时区,请在java.time framework()中使用LocalDate
。
LocalDate localDate = LocalDate.of(2014 , 5 , 6);
请注意,如果您有任何机会需要处理与其他时区或UTC的,这是错误的路要走。天真的程序员倾向于认为他们实际上不需要时区。
调用toString
生成标准ISO 8601格式的字符串。
String output = localDate.toString();
2014年5月6日
对于其它的格式,搜索栈溢出了DateTimeFormatter
类。
虽然现在java.time取代,您可以使用类似LocalDate
类的Joda-Time库(灵感java.time)。
LocalDate localDate = new LocalDate(2014, 5, 6);
您也可以使用Apache的百科全书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
这里我的密码只有日期:
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));
是否要比较两个日期以查看它们是否在同一天(忽略时间),还是要输出没有时间部分的日期?我得到了你想要的第一印象,但答案似乎认为你想要第二个 – 2010-05-10 20:53:40
那么,首先他谈到比较,然后他给出了打印它作为一个例子,以表明他没有时间戳意味着什么,所以我猜测他真的想比较时间而不是打印它,但如果这是他想要的,他可能不应该提及打印出来,因为这会混淆问题。 – 2010-05-10 21:02:06