ฉันกำลังให้คำตอบที่ทันสมัย
java.time และ ThreeTenABP
วิธีรับวันที่ปัจจุบัน:
LocalDate today = LocalDate.now(ZoneId.of("America/Hermosillo"));
สิ่งนี้จะให้LocalDate
วัตถุซึ่งเป็นสิ่งที่คุณควรใช้เพื่อเก็บวันที่ในโปรแกรมของคุณ A LocalDate
คือวันที่ไม่มีเวลา
เมื่อคุณต้องการที่จะแสดงวันที่ให้กับผู้ใช้จัดรูปแบบลงในสตริงที่เหมาะสมสำหรับสถานที่ของผู้ใช้:
DateTimeFormatter userFormatter
= DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
System.out.println(today.format(userFormatter));
เมื่อฉันวิ่งตัวอย่างนี้วันนี้ในภาษาอังกฤษของสหรัฐอเมริกาผลลัพธ์คือ:
13 กรกฎาคม 2019
หากคุณต้องการให้มันสั้นระบุหรือแม้กระทั่งFormatStyle.MEDIUM
ใช้สถานที่จัดรูปแบบเริ่มต้นดังนั้นประเด็นก็คือมันจะให้ผลลัพธ์ที่เหมาะสมสำหรับสถานที่ที่แตกต่างกันสำหรับสถานที่ที่แตกต่างกันFormatStyle.SHORT
DateTimeFormatter.ofLocalizedDate
หากผู้ใช้ของคุณมีข้อกำหนดพิเศษมากสำหรับรูปแบบผลลัพธ์ให้ใช้สตริงรูปแบบรูปแบบ:
DateTimeFormatter userFormatter = DateTimeFormatter.ofPattern(
"d-MMM-u", Locale.forLanguageTag("ar-AE"));
13 يول -2019
ฉันใช้และแนะนำ java.time ซึ่งเป็น API วันที่และเวลาของ Java สมัยใหม่ DateFormat
, SimpleDateFormat
, Date
และCalendar
ใช้ในคำถามที่ล้าสมัยและ / หรือหลายคำตอบอื่น ๆ ได้รับการออกแบบมาไม่ดีและระยะยาว และ java.time นั้นดีกว่ามากในการใช้งาน
คำถาม: ฉันสามารถใช้ java.time บน Android ได้หรือไม่
ใช่ java.time ทำงานได้ดีบนอุปกรณ์ Android รุ่นเก่าและใหม่กว่า มันก็ต้องมีอย่างน้อยJava 6
- ใน Java 8 และใหม่กว่าและบนอุปกรณ์ Android รุ่นใหม่ (จาก API ระดับ 26) API ที่ทันสมัยนั้นมีมาให้ในตัว
- ใน Java 6 และ 7 จะได้รับ ThreeTen Backport ซึ่งเป็น backport ของคลาสที่ทันสมัย (ThreeTen สำหรับ JSR 310 ดูลิงค์ที่ด้านล่าง)
- บน (เก่า) Android ใช้ Android รุ่น ThreeTen Backport มันเรียกว่า ThreeTenABP และตรวจสอบให้แน่ใจว่าคุณได้อิมพอร์ตคลาสวันที่และเวลาจาก
org.threeten.bp
ด้วยแพ็กเกจย่อย
การเชื่อมโยง
DateFormat
คลาสนั้นก็โอเคเมื่อคำถามนี้ถูกถามในปี 2011 คลาสนั้นและคลาสย่อยSimpleDateFormat
นั้นมีปัญหาเสมอและตอนนี้ล้าสมัยไปแล้ว ผมขอแนะนำให้คุณไม่ได้ใช้พวกเขาและแทนที่จะมองเข้าไปในjava.time ทันสมัย Java วันที่และเวลา API