มีรูปแบบวันที่เพื่อแสดงวันในสัปดาห์ใน java หรือไม่?


128

ฉันรู้รูปแบบวันที่เช่น
"yyyy-mm-dd"- ซึ่งแสดงวันที่ในรูปแบบ2011-02-26
"yyyy-MMM-dd"- ซึ่งแสดงวันที่ในรูปแบบ2011-FEB-26

ที่จะใช้เช่น:

SimpleDateFormat formatter = new SimpleDateFormat(
                "yyyy/MMM/dd ");

ฉันต้องการรูปแบบที่จะช่วยแสดงวันในสัปดาห์เช่น2011-02-MONหรืออะไรก็ได้ ฉันแค่ต้องการให้วันในสัปดาห์แสดงเป็นตัวอักษรพร้อมเดือนและปี ช่วยบอกรูปแบบเช่นนี้ได้ไหม


1
แค่ใช้ddเป็นฟอร์แมตล่ะ
Johan Sjöberg

3
ฉันแน่ใจว่าเอกสาร API ( download.oracle.com/javase/1.4.2/docs/api/java/text/… ) ยินดีที่จะให้คำตอบ
M. Jessup

1
คุณหมายถึงอะไร "วัน" - วันในสัปดาห์วันของเดือน ในตัวอย่างของคุณวันที่ทั้งหมดจะปรากฏขึ้น โปรดแสดงอินพุตและเอาต์พุตที่คุณต้องการ
Bozho

2
ตามคำแนะนำทั่วไปควรใช้-สัญกรณ์เฉพาะกับวันที่ในรูปแบบ ISO (เช่นปี - เดือน - วัน) เส้นประได้รับการเลือกตั้งที่นั่นเนื่องจากไม่ได้ใช้กับรูปแบบวันที่อื่น ๆ ในเวลานั้นเพื่อหลีกเลี่ยงความสับสนและตอนนี้ทุกคนกำลังใช้การสั่งซื้อที่กำหนดเองกับเส้นประ ...
Paŭlo Ebermann

คำตอบ:


323

สิ่งนี้ควรแสดง 'Tue':

new SimpleDateFormat("EEE").format(new Date());

สิ่งนี้ควรแสดงเป็น 'Tuesday':

new SimpleDateFormat("EEEE").format(new Date());

สิ่งนี้ควรแสดง 'T':

new SimpleDateFormat("EEEEE").format(new Date());

ดังนั้นตัวอย่างเฉพาะของคุณคือ:

new SimpleDateFormat("yyyy-MM-EEE").format(new Date());

5
ทางออกสวย! สิ่งที่ฉันกำลังมองหาคือ: วันจันทร์ที่ 04/04/2016 ดังนั้นในกรณีของฉันnew SimpleDateFormat("EEEE, dd/MM/yyyy");ถ้ามันช่วยใครสักคนในอนาคต
AuroMetal

1
ตกลงมันใช้งานได้ EEEEแสดงชื่อทั้งหมดของวันในสัปดาห์เช่น "วันจันทร์" "วันอังคาร" เป็นต้น
kosiara - Bartosz Kosarzycki

ฉันไม่ได้คิดจริงๆว่าไซต์นี้จะอยู่ใกล้ ๆ ได้นับประสาอะไรกับ java ในที่สุดก็จะได้รับการประกันตัวในวันที่ มันตอบคำถาม OPs ในทางเทคนิค อย่างไรก็ตามฉันสามารถเพิ่มส่วนใหม่เกี่ยวกับวิธีการทำงานของ java.time ใหม่ได้
Nathan Feger

18

ใช่ - 'E' ทำเคล็ดลับ

http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

Date date = new Date();
DateFormat df = new SimpleDateFormat("yyyy-MM-E");
System.out.println(df.format(date));

5
เห็น oracle ใน url ของ javadocs ยังรู้สึกแปลก ๆ
Nathan Feger

นอกจากนี้เรายังใช้: DateFormat df = new SimpleDateFormat("yyyy-MM-EEEEEEE");สำหรับการแสดง DayOfWeek ที่ยาวนาน
Do Nhu Vy



3

TL; DR

LocalDate.of( 2018 , Month.JANUARY , 23 )
         .format( DateTimeFormatter.ofPattern( uuuu-MM-EEE , Locale.US )  )

java.time

แนวทางสมัยใหม่ใช้คลาส java.time

LocalDate ld = LocalDate.of( 2018 , Month.JANUARY , 23 ) ;

สังเกตวิธีที่เราระบุLocaleเช่นLocale.CANADA_FRENCHเพื่อกำหนดภาษาของมนุษย์ที่ใช้แปลชื่อวัน

DateTimeFormatter f = DateTimeFormatter.ofPattern( uuuu-MM-EEE , Locale.US ) ;
String output = ld.format( f ) ;

ISO 8601

โดยวิธีการที่คุณอาจจะสนใจในมาตรฐานISO 8601 สัปดาห์ที่yyyy-Www-dหมายเลขโครงการ:

2018-W01-2

สัปดาห์ # 1 มีวันพฤหัสบดีแรกของปีปฏิทิน สัปดาห์เริ่มในวันจันทร์ หนึ่งปีมี 52 หรือ 53 สัปดาห์ สองสามวันสุดท้าย / สองสามวันแรกของปีปฏิทินอาจมาถึงในปีถัดไป / สัปดาห์ก่อนหน้า

เลขตัวเดียวในตอนท้ายคือวันในสัปดาห์ 1-7 สำหรับวันจันทร์ - วันอาทิตย์

เพิ่มคลาสไลบรารีThreeTen-Extraในโปรเจ็กต์ของคุณสำหรับYearWeekคลาส


เกี่ยวกับjava.time

java.timeกรอบถูกสร้างขึ้นใน Java 8 และต่อมา ชั้นเรียนเหล่านี้แย่งลำบากเก่ามรดกเรียนวันที่เวลาเช่นjava.util.Date, และCalendarSimpleDateFormat

โครงการJoda-Timeขณะนี้อยู่ในโหมดการบำรุงรักษาแนะนำการโยกย้ายไปยังคลาสjava.time

ต้องการเรียนรู้เพิ่มเติมโปรดดูที่ออราเคิลกวดวิชา และค้นหา Stack Overflow สำหรับตัวอย่างและคำอธิบายมากมาย สเปกJSR 310

จะหาคลาส java.time ได้ที่ไหน?

  • Java SE 8 , Java SE 9และใหม่กว่า
    • Built-in
    • ส่วนหนึ่งของ Java API มาตรฐานพร้อมการใช้งานแบบรวม
    • Java 9 เพิ่มคุณสมบัติและการแก้ไขเล็กน้อย
  • Java SE 6และ Java SE 7
    • มากของการทำงาน java.time จะกลับรังเพลิง Java 6 และ 7 ในThreeTen-ย้ายกลับ
  • Android
    • การใช้งานกลุ่ม Android เวอร์ชันที่ใหม่กว่าของคลาส java.time
    • สำหรับก่อนหน้านี้ของ Android ที่ThreeTenABPโครงการปรับThreeTen-ย้ายกลับ (ดังกล่าวข้างต้น) ดูวิธีใช้ ThreeTenABP … .

โครงการThreeTen-Extraขยาย java.time ด้วยคลาสเพิ่มเติม โปรเจ็กต์นี้เป็นพื้นที่พิสูจน์สำหรับการเพิ่ม java.time ในอนาคต คุณอาจพบว่าการเรียนที่มีประโยชน์บางอย่างที่นี่เช่นInterval, YearWeek, YearQuarterและอื่น ๆ อีกมากมาย


2

ฉันรู้ว่าคำถามนี้เกี่ยวกับการกำหนดวันในสัปดาห์เป็นสตริง (เช่นชื่อย่อ) แต่สำหรับใครก็ตามที่กำลังมองหาวันที่เป็นตัวเลขในสัปดาห์ (เหมือนที่ฉันเป็น) คุณสามารถใช้สตริงรูปแบบ "u" ใหม่ที่รองรับ ตั้งแต่ Java 7 ตัวอย่างเช่น:

new SimpleDateFormat("u").format(new Date());

ส่งกลับดัชนีวันของสัปดาห์ของวันนี้คือ: 1 = วันจันทร์, 2 = วันอังคาร, ... , 7 = วันอาทิตย์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.