簡體   English   中英

在 Java 中查找日期的日期

[英]Finding day of a date in Java

我想在 Java 中找出日期的日期,例如27-04-2011

我嘗試使用它,但它不起作用:

Calendar cal = Calendar.getInstance();
int val = cal.get(Calendar.DAY_OF_WEEK);

它給出了 integer 值,而不是我想要的字符串 output。 我沒有得到我想要的正確值。 例如,它給我28-02-2011日期的值4 ,它應該是 2,因為星期日是第一周。

是的,您已經詢問了一周中的哪一天 - 而 2 月 28 日是星期一,第 2 天 請注意,在您提供的代碼中,您實際上並沒有在任何地方設置日期 - 它只是使用當前日期,即星期三,這就是您得到 4 的原因。如果您可以展示您的嘗試方式要將日歷設置為不同的日期(例如 2 月 28 日),我們可以找出為什么這不適合您。

如果您希望將其格式化為文本,您可以使用SimpleDateFormat和“E”說明符。 例如(未經測試):

SimpleDateFormat formatter = new SimpleDateFormat("EEE");
String text = formatter.format(cal.getTime());

就我個人而言,我會完全避免使用Calendar - 使用Joda Time ,這是一個非常優越的日期和時間 API。

Calendar cal=Calendar.getInstance();
System.out.println(new SimpleDateFormat("EEE").format(cal.getTime()));

Output

Wed

也可以看看

  String dayNames[] = new DateFormatSymbols().getWeekdays();
  Calendar date1 = Calendar.getInstance();
  System.out.println("Today is a " 
    + dayNames[date1.get(Calendar.DAY_OF_WEEK)]);

java.time

java.util日期時間 API 及其格式 API、 SimpleDateFormat已過時且容易出錯。 建議完全停止使用它們並切換到現代日期時間 API *

此外,下面引用的是Joda-Time 主頁上的通知:

請注意,從 Java SE 8 開始,用戶被要求遷移到 java.time (JSR-310) - JDK 的核心部分,它取代了這個項目。

使用java.time的解決方案,現代日期時間 API:

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        String input = "27-04-2011";
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("d-M-u", Locale.ENGLISH);
        LocalDate date = LocalDate.parse(input, dtf);
        DayOfWeek dow = date.getDayOfWeek();
        System.out.println(dow);

        // String value
        String strDay = dow.getDisplayName(TextStyle.FULL, Locale.ENGLISH);
        System.out.println(strDay);
        strDay = dow.getDisplayName(TextStyle.SHORT, Locale.ENGLISH);
        System.out.println(strDay);

        // Alternatively
        strDay = date.format(DateTimeFormatter.ofPattern("EEEE", Locale.ENGLISH));
        System.out.println(strDay);
        strDay = date.format(DateTimeFormatter.ofPattern("EEE", Locale.ENGLISH));
        System.out.println(strDay);
    }
}

Output:

WEDNESDAY
Wednesday
Wed
Wednesday
Wed

在線演示

Trail: Date Time了解有關現代日期時間 API 的更多信息。


* For any reason, if you have to stick to Java 6 or Java 7, you can use ThreeTen-Backport which backports most of the java.time functionality to Java 6 & 7. If you are working for an Android project and your Android API級別仍然不符合 Java-8,檢查Java 8+ API 可通過脫糖如何在 Android 項目中使用 ThreeTenABP

請參閱 DAY_OF_WEEK 字段的 JavaDoc。 它指向 7 個常量 SUNDAY..SATURDAY,顯示如何解碼 cal.get(Calendary.DAY_OF_WEEK) 的 int 返回值。 你確定嗎

Calendar cal = Calendar.getInstance();
cal.set(2011, 02, 28);
cal.get(Calendar.DAY_OF_WEEK);

為您返回錯誤的值?

嘗試以下操作:

    Calendar cal=Calendar.getInstance();
    int val = cal.get(Calendar.DAY_OF_WEEK);
    System.out.println(new DateFormatSymbols().getWeekdays()[val]);

或者

    Calendar cal=Calendar.getInstance();
    String dayName = new DateFormatSymbols().getWeekdays()[cal
            .get(Calendar.DAY_OF_WEEK)];
    System.out.println(dayName);
Calendar cal=Calendar.getInstance();
    cal.set(2011, 2, 28);
     int val = cal.get(Calendar.DAY_OF_WEEK);
     System.out.println(val);

查看SimpleDateFormat和適當的Locale

如果您需要月份中的確切日期值,則需要使用 Calendar:DAY_OF_MONTH 它將返回從 1 開始的月份中的確切日期。

//Current date is 07-06-2021 and this will return 7
Calendar cal = Calendar.getInstance();
int val = cal.get(Calendar.DAY_OF_MONTH);
System.out.println("Date in month:"+val);

//If you want the day of the week in text better use the 
//SimpleDateFormat, since Calendar API will return the integer value in 
// the week if we given Calendar.DAY_OF_WEEK
String dayWeekText = new SimpleDateFormat("EEEE").format(cal.getTime());
System.out.println("Day of week:"+dayWeekText);

正如評論中建議的 Java 日期 API 具有所有這些功能。 Java 8 引入了新的日期和時間 API,以解決舊版 java.util.Date 和 java.util.Calendar 的缺點

使用 Java 中的日期 API 可以實現相同的目的

LocalDate localDate = LocalDate.parse("2021-06-08"); //2021 June 08 Tuesday
System.out.println(localDate.dayOfWeek().getAsText()); //Output as : Tuesday
System.out.println(localDate.dayOfWeek().getAsShortText()); //Output as : Tue
System.out.println(localDate.dayOfMonth().get()); //Output as current date

暫無
暫無

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

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