我需要一個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