簡體   English   中英

將兩個字符串與Java中的Date進行比較

[英]Compare two strings to Date in java

我有一個約會,我必須檢查是星期六還是星期天。 我正在進行嗎?

Calendar gcal = new GregorianCalendar();
DateFormat dateFormat = new SimpleDateFormat("EEEE");
        Date currentDate = gcal.getTime();
        String strDate = dateFormat.format(currentDate);
        if (!"Saturday".equals(strDate)) {
}

它的工作正常。 但我不能比較兩個字符串,

if (!"Saturday" || "Sunday".equals(strDate)) {}

如果約會是星期六或星期日,我必須跳過循環....提前感謝...

無需創建/格式化Date對象,請使用Calendar方法:

Calendar gcal = new GregorianCalendar();

if (gcal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY && gcal.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) {

}

如果日期是星期六或星期日,我必須跳過循環。

那應該是

if (!("Saturday".equals(strDate) || "Sunday".equals(strDate)) {

}

TL;博士

今天是星期六嗎?

LocalDate.now( ZoneId.of( "America/Montreal" ) )
         .getDayOfWeek()
         .equals( DayOfWeek.SATURDAY )

細節

我正在進行嗎?

不。您正在使用已被java.time類取代的麻煩的舊日期時間類。

另一個問題是隱含地依賴於默認時區。 最好明確指定您的預期時區。 時區確定日期,日期確定星期幾,因此時區至關重要。

另一個問題是你不必要地從Calendar轉換為Date 但最好完全避免這些類。

DayOfWeek

DayOfWeek 枚舉定義了七個對象,一個星期中的每一天。

您應該在代碼周圍傳遞這些對象而不是字符串。 請注意,在下面的代碼中我們根本不使用字符串。

請注意,這些DayOfWeek對象不是字符串。 它們是真實的物體,提供了幾種方法。 這些方法包括toString ,它以英文生成硬編碼的String,全部為大寫。 方法getDisplayName生成以各種人類語言自動本地化的星期幾的名稱。

Java中的枚舉功能比其他語言中常見的功能強大且實用。 請參閱Oracle教程

LocalDate

LocalDate類表示沒有時間且沒有時區的僅日期值。

時區對於確定日期至關重要。 對於任何給定的時刻,日期在全球范圍內因地區而異。 例如, 法國巴黎午夜過后幾分鍾是新的一天,而在魁北克蒙特利爾仍然是“昨天”。

continent/region的格式指定適當的時區名稱 ,例如America/MontrealAfrica/CasablancaPacific/Auckland 切勿使用3-4字母縮寫,例如ESTIST因為它們不是真正的時區,不是標准化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );

today.toString():2017-02-27

詢問LocalDate對象的DayOfWeek

DayOfWeek dow = today.getDayOfWeek();

dow.toString():星期一

與您的目標星期相比。

Boolean isTodaySaturday = dow.equals( DayOfWeek.SATURDAY );

isTodaySaturday.toString():false

在IdeOne.com上試用此代碼

看到類似的問題: 如何在Java 8中向LocalDate添加天數時跳過周末?


關於java.time

java.time框架內置於Java 8及更高版本中。 這些類取代了麻煩的舊遺留日期時間類,如java.util.DateCalendarSimpleDateFormat

現在處於維護模式Joda-Time項目建議遷移到java.time類。

要了解更多信息,請參閱Oracle教程 並搜索Stack Overflow以獲取許多示例和解釋。 規范是JSR 310

從哪里獲取java.time類?

ThreeTen-Extra項目使用其他類擴展了java.time。 該項目是未來可能添加到java.time的試驗場。 您可以在這里找到一些有用的類,比如IntervalYearWeekYearQuarter ,和更多

或者:

if (!strDate.matches("Saturday|Sunday")) {
}

但它更慢。

暫無
暫無

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

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