簡體   English   中英

Java 日期確定 DAY 是否更大

[英]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 10Sun 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);

tl;博士

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

現代方法使用 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[美國/紐約]

順便說一句,永遠不要使用ESTIST等 3-4 個字母的縮寫,因為它們不是真正的時區,不是標准化的,甚至不是唯一的 (.)。 continent/region格式指定適當的時區名稱,例如America/MontrealAfrica/CasablancaPacific/Auckland

最后,獲取您要查找的 integer 編號。

int dayOfYear = zdt.getDayOfYear() ;

年份:191

請參閱在 IdeOne.com 上實時運行的代碼

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 datesecond element will be month

如果月份相同,那么您只需查看哪個日期比另一個大(您也可以查看年份)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM