1. Date
คลาสและเวลา Unix
จากจุดเริ่มต้นของ Java ภาษามีคลาสพิเศษสำหรับการทำงานกับเวลาและวันที่Date
— เมื่อเวลาผ่านไปมีคลาสเพิ่มเติมสำหรับการทำงานกับวันที่ปรากฏขึ้น แต่โปรแกรมเมอร์ยังคงใช้คลาสต่อไปDate
แม้กระทั่งทุกวันนี้
เพราะมันง่ายและสะดวกมาก และในฐานะโปรแกรมเมอร์คุณจะต้องพบเจอมันอย่างแน่นอนในทุกโปรเจกต์จริง ๆ จะใช้หรือไม่ใช้ก็ได้ แต่คุณต้องรู้ ดังนั้นให้เวลาอันมีค่าของคุณสักสองสามนาที
อะไรที่ทำให้Date
ชั้นเรียนดี? ความเรียบง่าย
คลาสDate
เก็บข้อมูลวันที่และเวลาเป็นจำนวนมิลลิวินาทีที่ผ่านไปตั้งแต่วันที่ 1 มกราคม 1970ซึ่งเป็นมิลลิวินาทีจำนวนมาก ดังนั้นlong
ประเภทจึงใช้เพื่อจัดเก็บ
ทำไมตั้งแต่ปี 1970 โดยเฉพาะ? สิ่งนี้เรียกว่าUnix time : มันเป็นวิธีที่ระบบปฏิบัติการ Unix ซึ่งเป็นปู่ของระบบปฏิบัติการสมัยใหม่ทั้งหมดรักษาเวลา
แต่คุณสามารถค้นหาได้อย่างง่ายดายว่าเวลาผ่านไปเท่าใดระหว่างวันที่สองวัน: เพียงลบหนึ่งวันออกจากอีกวัน และคุณจะได้ค่าความแตกต่างของเวลาระหว่างวันที่เป็นมิลลิวินาทีที่ใกล้ที่สุด
ต่อไปนี้คือตัวอย่างที่เป็นประโยชน์ของการทำงานกับDate
ชั้นเรียน
2. รับวันที่ปัจจุบัน
หากต้องการดูเวลาและวันที่ปัจจุบัน เพียงสร้างDate
วัตถุ อ็อบเจกต์ใหม่แต่ละรายการจะเก็บเวลาที่ถูกสร้างขึ้น มันดูง่ายมาก:
Date current = new Date();
หลังจากดำเนินการคำสั่งนี้current
ตัวแปรจะจัดเก็บการอ้างอิงไปยังDate
ออบเจกต์ที่สร้างขึ้น ซึ่งจะเก็บเวลาที่สร้างไว้ภายใน ซึ่งเป็นจำนวนมิลลิวินาทีที่ผ่านไปตั้งแต่วันที่ 1 มกราคม 1970
การแสดงวันที่ปัจจุบันบนหน้าจอ
ในการแสดงวันที่ปัจจุบัน เพียงแค่: a) สร้างDate
วัตถุใหม่ b) พิมพ์ไปยังหน้าจอโดยใช้System.out.println()
วิธีการ
ตัวอย่าง:
รหัส | เอาต์พุตคอนโซล |
---|---|
|
|
นี่คือความหมายของเอาต์พุตคอนโซล:
ข้อความ | การตีความ |
---|---|
พฤหัสบดี _ | วันพฤหัสบดี |
วันที่ 21 ก.พ | 21 กุมภาพันธ์ |
14:01:34น | ชั่วโมง : นาที : วินาที |
กท | เขตเวลา: เวลายุโรปตะวันออก |
2019 | ปี |
3. การตั้งค่าวันที่เฉพาะ
เราทราบวิธีรับเวลาปัจจุบัน แต่เราจะสร้างDate
วัตถุที่เก็บวันที่หรือเวลาอื่น ได้อย่างไร
อีกครั้งทุกอย่างง่ายที่นี่ หากต้องการกำหนดวันที่เฉพาะ คุณต้องเขียนโค้ดดังนี้:
Date birthday = new Date(year, month, day);
ทุกอย่างเรียบง่ายและชัดเจน แต่มีความแตกต่างสองประการที่ต้องระวัง:
- ปีจะต้องนับจาก 1900
- เดือนมีหมายเลขจากศูนย์
นี่เป็นอีกหนึ่งมรดกของระบบปฏิบัติการ Unix: บน Unix โปรแกรมเมอร์จะแสดงปีโดยใช้ตัวเลขสองหลัก แทนที่จะเป็นปี 1977 พวกเขาเขียนว่า 77 ดังนั้น 77 จึงเป็นปีที่ถูกต้องหากนับจากปี 1900
ตัวอย่างเช่น ฉันเกิดวันที่ 21 มีนาคม พ.ศ. 2532 มีนาคมเป็นเดือนที่ 3 ดังนั้นฉันต้องเขียน:
รหัส | เอาต์พุตคอนโซล |
---|---|
|
|
เดือนมีเลขจากศูนย์ แต่วันไม่ใช่ แปลกนิดหน่อยใช่ไหม?
เราคิดว่าโปรแกรมเมอร์ที่แท้จริงควรจะมีชัยและนับวันของเดือนจากศูนย์เช่นกัน โอ้ผู้คล้อยตามเหล่านี้🙂
การตั้งเวลาเฉพาะ
การตั้งเวลาที่เฉพาะเจาะจงนั้นค่อนข้างง่าย สำหรับสิ่งนี้ คุณต้องเขียนคำสั่งดังนี้:
Date birthday = new Date(year, month, day, hour, minutes, seconds);
ชั่วโมง นาที และวินาทีเป็นเลขศูนย์: ให้โปรแกรมเมอร์ที่อยู่ในตัวคุณถอนหายใจด้วยความโล่งอก
ตัวอย่าง:
รหัส | เอาต์พุตคอนโซล |
---|---|
|
|
เราตั้งเวลา12:15 น.และวันที่4 มิถุนายน 2548 . นี่เป็นเรื่องยากเล็กน้อยสำหรับผู้ที่ไม่ใช่โปรแกรมเมอร์ในการอ่าน แต่ก็ใช้งานได้ตามที่ควร
4. การทำงานกับองค์ประกอบของวันที่
คุณสามารถทำอะไรกับDate
วัตถุได้มากกว่าแค่แสดง มีวิธีการที่ช่วยให้คุณได้รับแต่ละองค์ประกอบของวันที่จัดเก็บภายใน:
วิธี | คำอธิบาย |
---|---|
|
ส่งกลับปีของวันที่เทียบกับ 1900 |
|
ส่งกลับเดือนของวันที่ (เดือนเป็นเลขจากศูนย์) |
|
ส่งกลับวันของเดือน |
|
ส่งกลับวันในสัปดาห์ |
|
ส่งกลับชั่วโมง |
|
ส่งกลับนาที |
|
คืนค่าวินาที |
ตัวอย่าง:
รหัส | เอาต์พุตคอนโซล | บันทึก |
---|---|---|
|
|
2548 วัน เสาร์ เดือน มิถุนายน |
อย่างไรก็ตามDate
วัตถุไม่เพียงแต่ช่วยให้คุณได้รับองค์ประกอบแต่ละรายการของวันที่เท่านั้น แต่ยังเปลี่ยนองค์ประกอบเหล่านี้ได้ด้วย:
วิธี | คำอธิบาย |
---|---|
void setYear(int year) |
เปลี่ยนปีของวันที่ มีการระบุปีเทียบกับปี 1900 |
void setMonth(int month) |
เปลี่ยนเดือนของวันที่ (เดือนนับจากศูนย์) |
void setDate(int date) |
เปลี่ยนวันของเดือน |
void setHours(int hours) |
เปลี่ยนชั่วโมง |
void setMinutes(int minutes) |
เปลี่ยนนาที |
void setSeconds(int seconds) |
เปลี่ยนวินาที |
5. มิลลิวินาที
ดังที่เรากล่าวไว้ก่อนหน้านี้Date
ออบเจ็กต์จะเก็บจำนวนมิลลิวินาทีที่ผ่านไปตั้งแต่วันที่ 1 มกราคม 1970
ถ้าเราต้องการตัวเลขนั้น เราสามารถหาได้จากวัตถุDate
:
long time = date.getTime();
เมธอดgetTime()
ส่งคืนจำนวนมิลลิวินาทีที่เก็บไว้ภายในDate
วัตถุ
ไม่เพียงแต่คุณจะได้จำนวนมิลลิวินาทีเท่านั้น แต่คุณยังสามารถเปลี่ยนตัวเลขนั้นในออบเจกต์ที่มีอยู่ได้ด้วย:
Date date = new Date();
date.setTime(1117876500000L);
อย่างไรก็ตาม คุณสามารถเขียนสิ่งนี้ให้กระชับยิ่งขึ้นโดยส่งเวลาไปยังวัตถุDate
ทันทีเมื่อสร้าง:
Date date = new Date(1117876500000L);
6. การเปรียบเทียบวันที่
หากคุณต้องการเปรียบเทียบวันที่สองวันและดูว่าวันใดมาก่อน คุณมีสามตัวเลือก
วิธีแรกคือเปรียบเทียบจำนวนมิลลิวินาทีที่แต่ละร้านจัดเก็บ:
if (date1.getTime() < date2.getTime())
วิธีที่สองคือการใช้before()
วิธีการของDate
วัตถุ:
if (date1.before(date2))
มันอ่านดังนี้ ถ้าdate1
มาก่อนdate2
ก็...
วิธีที่สามคือการใช้after()
วิธีการของDate
วัตถุ:
if (date2.after(date1))
มันอ่านดังนี้: if date2
is after date1
, then...
7. DateFormat
ชั้นเรียน
โปรดจำไว้ว่าเมื่อเราแสดงวันที่บนหน้าจอ เราจะเห็นสิ่งนี้Thu Feb 21 14:01:34 EET 2019
: ทุกอย่างดูเหมือนถูกต้อง แต่รูปแบบคือวิธีการแสดงวันที่สำหรับโปรแกรมเมอร์มากกว่ามนุษย์ทั่วไป เราต้องการแสดงวันที่ให้ชัดเจนยิ่งขึ้นสำหรับผู้ใช้ บางอย่างเช่นTuesday, February 21
.
และไม่มีปี หรือหนึ่งปีหากจำเป็น โดยทั่วไป เราต้องการแสดงวันที่ในรูปแบบต่างๆ
มีคลาสพิเศษสำหรับสิ่งนี้: SimpleDateFormat
.
ตัวอย่าง:
รหัส |
---|
|
เอาต์พุตคอนโซล |
|
ดูสิ่งที่โปรแกรมแสดง: Jun-04-2005
. นั่นไม่ใช่สิ่งที่เคยเป็นเลย
ความแตกต่างคือเราไม่ได้แสดงDate
วัตถุ แต่เป็นสตริงพิเศษที่ได้รับจากการเรียกใช้format()
เมธอดบนSimpleDateFormat
วัตถุ แต่นั่นไม่ใช่ประเด็นหลักที่นี่
เมื่อSimpleDateFormat
สร้างออบเจกต์แล้ว เราจะส่งสตริง"MMM-dd-YYYY"
เป็นพารามิเตอร์ สตริงนี้สื่อถึงรูปแบบวันที่ที่เราเห็นในเอาต์พุตคอนโซล
- MMM หมายถึงการแสดงชื่อเดือนโดยย่อโดยใช้ตัวอักษรสามตัว
- dd หมายถึงการแสดงวันของเดือน
- YYYY หมายถึงการแสดงปีโดยใช้ตัวเลขสี่หลัก
ถ้าเราต้องการส่งออกเดือนเป็นตัวเลขMMM
เราต้องเขียน แทน MM
ซึ่งให้รูป"MM-dd-YYYY"
แบบ เอาต์พุตหน้าจอจะเป็น06-04-2005
เราจะหารือเกี่ยวกับชั้นเรียนนี้ในรายละเอียดเพิ่มเติมในภายหลัง
8. Date.parse
วิธีการ
ชั้นDate
เรียนสามารถทำอย่างอื่นที่น่าสนใจและมีประโยชน์ได้ เช่น รับวันที่จากสตริง หรือตามที่โปรแกรมเมอร์พูด มันสามารถแยกวิเคราะห์สตริงได้
มีparse()
วิธีการพิเศษสำหรับสิ่งนี้ การแยกวิเคราะห์มีลักษณะดังนี้:
Date date = new Date();
date.setTime( Date.parse("Jul 06 12:15:00 2019") );
อย่างไรก็ตาม โค้ดนี้สามารถเขียนให้กระชับกว่านี้ได้:
Date date = new Date("Jul 06 12:15:00 2019");
เราจะพิจารณาการแยกวิเคราะห์สตริงอย่างละเอียดในบทเรียนอื่นๆ
GO TO FULL VERSION