[英]Java Date determine if DAY is greater
我有字符串格式的時間戳 Sun Jul 10 17:47:55 EDT 2011
我需要確定當前 DAY 是否大於存儲的日期。
我將使用Date currentDate = new Date();
獲取當前日期
我會將我的字符串解析為Date
object 與SimpleDateFormat dateParser = new SimpleDateParser("E MMM d HH:mm:ss zy");
但使用“currentDate.after()”function 或currentDate.compare()
function 只會告訴我任何日期是否大於或小於,包括小時、分鍾或秒。
所以我的下一個預感是將日期轉換為一年中的某一天,並比較新的整數,如果 integer1>integer2,那么.. 但我該怎么做呢?
我還考慮將字符串分解為僅包含存儲字符串日期的前半部分的 substring。 Sun Jul 10
到Sun Jul 10
但這里的問題是天值有時是 1 位數字,有時是 2 位數字。
另外我認為Calendar
抽象 class 是 go 關於此的最佳方法,但我不確定,目前對如何將日期對象轉換為日歷 object 進行比較感到困惑!
洞察力贊賞
這可能對您的情況有所幫助(作為快速方法):
Locale.setDefault(Locale.UK);
String storedDateString = "Sun Jul 10 17:47:55 EDT 2011";
SimpleDateFormat dateParser = new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy");
Date storedDate = dateParser.parse(storedDateString);
GregorianCalendar storedCal = new GregorianCalendar();
storedCal.setTime(storedDate);
GregorianCalendar currentCal = new GregorianCalendar();
int storedDayOfYear = storedCal.get(Calendar.DAY_OF_YEAR);
int currentDayofYear = currentCal.get(Calendar.DAY_OF_YEAR);
//int storedDayYear = storedCal.get(Calendar.YEAR);
//int currentDayYear = storedCal.get(Calendar.YEAR);
System.out.println(storedDayOfYear);
System.out.println(currentDayofYear);
//System.out.println(storedDayYear);
//System.out.println(currentDayYear);
結果:
191
192
之后,比較 int 值就很簡單了。
如果要將日期 object 轉換為日歷對象,請使用
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
您可以獲得日歷 object 的日期值
cal.get(Calendar.DAY_OF_MONTH);
或者
calendar.get(Calendar.DAY_OF_YEAR);
但是,請注意,在比較不同月份(第一個示例)或年份(第二個示例)的日期時,這將不起作用。 您最好將每個日歷 object 上的毫秒、秒、分鍾和小時設置為 0 並比較對象:
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(date1);
c2.setTime(date2);
c1.set(Calendar.MILLISECOND, 0);
c1.set(Calendar.SECOND, 0);
c1.set(Calendar.MINUTE, 0);
c1.set(Calendar.HOUR, 0);
c2.set(Calendar.MILLISECOND, 0);
c2.set(Calendar.SECOND, 0);
c2.set(Calendar.MINUTE, 0);
c2.set(Calendar.HOUR, 0);
c1.compareTo(c2);
ZonedDateTime.parse(
"Sun Jul 10 17:47:55 EDT 2011" ,
DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss z uuuu" , Locale.US )
).getDayOfYear()
191
顯然,您想比較兩個日期的日期,無論年份和時間如何,每個日期進入一年的時間。
這個一年中的一天的想法經常被錯誤地標記為 Julian 日期,但被正確地稱為Ordinal Date 。 甚至包括一年,例如2017-186
。 但顯然你只想要一年中的一天,一個從 1 到 365 或 366 的數字。
現代方法使用 java.time 類來取代您正在使用的麻煩的舊日期時間類。
首先將您的字符串解析為ZonedDateTime
。
String input = "Sun Jul 10 17:47:55 EDT 2011" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss z uuuu" , Locale.US ) ;
ZonedDateTime zdt = ZonedDateTime.parse( input , f ) ;
zdt.toString(): 2011-07-10T17:47:55-04:00[美國/紐約]
順便說一句,永遠不要使用EST
或IST
等 3-4 個字母的縮寫,因為它們不是真正的時區,不是標准化的,甚至不是唯一的 (.)。 以continent/region
格式指定適當的時區名稱,例如America/Montreal
、 Africa/Casablanca
或Pacific/Auckland
。
最后,獲取您要查找的 integer 編號。
int dayOfYear = zdt.getDayOfYear() ;
年份:191
Calendar cal = Calendar.getInstance(); // use the getInstance(TimeZone zone) overload
// if you want some other timezone than the
// default one
cal.setTime(yourDate);
cal.get(Calendar.DAY_OF_MONTH);
首先,使用toString()
將日期 object 轉換為字符串。 完成后,使用split(" ")
拆分字符串。 這將返回一個String[]
。 由於兩種格式相同,因此在 arrays 中, third element will contain the date
, second element will be month
。
如果月份相同,那么您只需查看哪個日期比另一個大(您也可以查看年份)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.