[英]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.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.