Java - วันที่และเวลา
Java จัดเตรียมไฟล์ Date คลาสที่มีอยู่ใน java.util แพ็กเกจคลาสนี้จะสรุปวันที่และเวลาปัจจุบัน
คลาส Date รองรับตัวสร้างสองตัวดังแสดงในตารางต่อไปนี้
ซีเนียร์ | ตัวสร้างและคำอธิบาย |
---|---|
1 | Date( ) ตัวสร้างนี้เริ่มต้นวัตถุด้วยวันที่และเวลาปัจจุบัน |
2 | Date(long millisec) ตัวสร้างนี้ยอมรับอาร์กิวเมนต์ที่เท่ากับจำนวนมิลลิวินาทีที่ผ่านไปนับตั้งแต่เที่ยงคืนวันที่ 1 มกราคม 1970 |
ต่อไปนี้เป็นวิธีการของคลาสวันที่
ซีเนียร์ | วิธีการและคำอธิบาย |
---|---|
1 | boolean after(Date date) ส่งคืนค่าจริงหากอ็อบเจ็กต์วันที่เรียกใช้มีวันที่ที่ช้ากว่าวันที่ที่ระบุมิฉะนั้นจะส่งกลับเท็จ |
2 | boolean before(Date date) ส่งคืนค่าจริงหากอ็อบเจ็กต์วันที่เรียกใช้มีวันที่ก่อนหน้าวันที่ระบุไว้มิฉะนั้นจะส่งกลับเท็จ |
3 | Object clone( ) ทำซ้ำอ็อบเจ็กต์ Date ที่เรียกใช้ |
4 | int compareTo(Date date) เปรียบเทียบค่าของวัตถุที่เรียกใช้กับวันที่ ส่งคืน 0 ถ้าค่าเท่ากัน ส่งคืนค่าลบหากออบเจ็กต์ที่เรียกใช้ก่อนหน้าวันที่ ส่งคืนค่าบวกหากวัตถุที่เรียกใช้ช้ากว่าวันที่ |
5 | int compareTo(Object obj) ดำเนินการเหมือนกันกับ CompareTo (Date) ถ้า obj เป็นคลาส Date มิฉะนั้นจะพ่น ClassCastException |
6 | boolean equals(Object date) ส่งคืนจริงหากอ็อบเจ็กต์วันที่เรียกใช้มีเวลาและวันที่เดียวกันกับที่ระบุโดยวันที่มิฉะนั้นจะส่งกลับเท็จ |
7 | long getTime( ) ส่งคืนจำนวนมิลลิวินาทีที่ผ่านไปนับตั้งแต่วันที่ 1 มกราคม 1970 |
8 | int hashCode( ) ส่งคืนรหัสแฮชสำหรับวัตถุที่เรียกใช้ |
9 | void setTime(long time) ตั้งเวลาและวันที่ตามที่ระบุโดยเวลาซึ่งแสดงเวลาที่ผ่านไปในหน่วยมิลลิวินาทีนับจากเที่ยงคืนวันที่ 1 มกราคม 1970 |
10 | String toString( ) แปลงอ็อบเจ็กต์วันที่เรียกใช้เป็นสตริงและส่งคืนผลลัพธ์ |
รับวันที่และเวลาปัจจุบัน
นี่เป็นวิธีที่ง่ายมากในการรับวันที่และเวลาปัจจุบันใน Java คุณสามารถใช้ออบเจ็กต์ Date อย่างง่ายด้วยวิธีtoString ()เพื่อพิมพ์วันที่และเวลาปัจจุบันดังนี้ -
ตัวอย่าง
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display time and date using toString()
System.out.println(date.toString());
}
}
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
on May 04 09:51:52 CDT 2009
การเปรียบเทียบวันที่
ต่อไปนี้เป็นสามวิธีในการเปรียบเทียบวันที่สองวัน -
คุณสามารถใช้ getTime () เพื่อรับจำนวนมิลลิวินาทีที่ผ่านไปตั้งแต่เที่ยงคืนวันที่ 1 มกราคม 1970 สำหรับวัตถุทั้งสองแล้วเปรียบเทียบค่าทั้งสองนี้
คุณสามารถใช้เมธอด before (), after () และเท่ากับ () เนื่องจากวันที่ 12 ของเดือนมาก่อนวันที่ 18 ตัวอย่างเช่นวันที่ใหม่ (99, 2, 12) ก่อน (วันที่ใหม่ (99, 2, 18)) จะคืนค่าจริง
คุณสามารถใช้วิธีการ CompareTo () ซึ่งกำหนดโดยอินเทอร์เฟซเปรียบเทียบและดำเนินการตามวันที่
การจัดรูปแบบวันที่โดยใช้ SimpleDateFormat
SimpleDateFormat เป็นคลาสที่เป็นรูปธรรมสำหรับการจัดรูปแบบและการแยกวิเคราะห์วันที่ในลักษณะที่คำนึงถึงสถานที่ SimpleDateFormat ช่วยให้คุณสามารถเริ่มต้นด้วยการเลือกรูปแบบที่ผู้ใช้กำหนดสำหรับการจัดรูปแบบวันที่และเวลา
ตัวอย่าง
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
Date dNow = new Date( );
SimpleDateFormat ft =
new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(dNow));
}
}
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Current Date: Sun 2004.07.18 at 04:14:09 PM PDT
รหัสรูปแบบ DateFormat อย่างง่าย
ในการระบุรูปแบบเวลาให้ใช้สตริงรูปแบบเวลา ในรูปแบบนี้ตัวอักษร ASCII ทั้งหมดสงวนไว้เป็นตัวอักษรรูปแบบซึ่งกำหนดไว้ดังต่อไปนี้ -
ตัวละคร | คำอธิบาย | ตัวอย่าง |
---|---|---|
ช | ผู้กำหนดยุค | ค.ศ. |
ย | ปีเป็นตัวเลขสี่หลัก | พ.ศ. 2544 |
ม | เดือนในปี | กรกฎาคมหรือ 07 |
ง | วันในเดือน | 10 |
ซ | ชั่วโมงใน AM / PM (1 ~ 12) | 12 |
ซ | ชั่วโมงในวัน (0 ~ 23) | 22 |
ม | นาทีในชั่วโมง | 30 |
s | วินาทีในหนึ่งนาที | 55 |
ส | มิลลิวินาที | 234 |
จ | วันในสัปดาห์ | วันอังคาร |
ง | วันในปี | 360 |
ฉ | วันของสัปดาห์ในเดือน | 2 (วันพุธที่สองของเดือนกรกฎาคม) |
ว | สัปดาห์ในปี | 40 |
ว | สัปดาห์ในเดือน | 1 |
ก | เครื่องหมาย AM / PM | น |
k | ชั่วโมงในวัน (1 ~ 24) | 24 |
เค | ชั่วโมงใน AM / PM (0 ~ 11) | 10 |
z | เขตเวลา | เวลามาตรฐานตะวันออก |
' | Escape สำหรับข้อความ | ตัวคั่น |
" | ใบเสนอราคาเดียว | ` |
การจัดรูปแบบวันที่โดยใช้ printf
การจัดรูปแบบวันที่และเวลาสามารถทำได้อย่างง่ายดายโดยใช้ printfวิธี. คุณใช้รูปแบบตัวอักษรสองตัวโดยเริ่มต้นด้วยt และลงท้ายด้วยตัวอักษรตัวใดตัวหนึ่งของตารางดังแสดงในรหัสต่อไปนี้
ตัวอย่าง
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display time and date
String str = String.format("Current Date/Time : %tc", date );
System.out.printf(str);
}
}
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Current Date/Time : Sat Dec 15 16:37:57 MST 2012
มันจะโง่หน่อยถ้าคุณต้องระบุวันที่หลาย ๆ ครั้งเพื่อจัดรูปแบบแต่ละส่วน ด้วยเหตุนี้สตริงรูปแบบจึงสามารถระบุดัชนีของอาร์กิวเมนต์ที่จะจัดรูปแบบได้
ดัชนีจะต้องเป็นไปตาม% ทันทีและจะต้องถูกยกเลิกโดย $
ตัวอย่าง
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display time and date
System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
}
}
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Due date: February 09, 2004
หรือคุณสามารถใช้แฟล็ก < บ่งชี้ว่าควรใช้อาร์กิวเมนต์เดียวกันกับในข้อกำหนดรูปแบบก่อนหน้านี้อีกครั้ง
ตัวอย่าง
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display formatted date
System.out.printf("%s %tB %<te, %<tY", "Due date:", date);
}
}
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Due date: February 09, 2004
อักขระการแปลงวันที่และเวลา
ตัวละคร | คำอธิบาย | ตัวอย่าง |
---|---|---|
ค | วันที่และเวลาที่สมบูรณ์ | จ. 04 พฤษภาคม 09:51:52 CDT 2552 |
ฉ | วันที่ ISO 8601 | พ.ศ. 2547-02-09 |
ง | วันที่จัดรูปแบบสหรัฐอเมริกา (เดือน / วัน / ปี) | 02/09/2004 |
ที | เวลา 24 ชั่วโมง | 18:05:19 น |
ร | เวลา 12 ชั่วโมง | 06:05:19 น |
ร | เวลา 24 ชั่วโมงไม่มีวินาที | 18:05 น |
ย | ปีสี่หลัก (มีเลขศูนย์นำหน้า) | พ.ศ. 2547 |
ย | สองหลักสุดท้ายของปี (โดยมีเลขศูนย์นำหน้า) | 04 |
ค | ตัวเลขสองหลักแรกของปี (มีเลขศูนย์นำหน้า) | 20 |
ข | ชื่อเต็มเดือน | กุมภาพันธ์ |
ข | ชื่อเดือนแบบย่อ | ก.พ. |
ม | เดือนสองหลัก (มีเลขศูนย์นำหน้า) | 02 |
ง | วันสองหลัก (มีเลขศูนย์นำหน้า) | 03 |
จ | วันสองหลัก (ไม่มีศูนย์นำหน้า) | 9 |
ก | ชื่อเต็มวันทำงาน | วันจันทร์ |
ก | ชื่อย่อวันทำงาน | จ |
ญ | วันสามหลักของปี (มีเลขศูนย์นำหน้า) | 069 |
ซ | ชั่วโมงสองหลัก (โดยมีเลขศูนย์นำหน้า) ระหว่าง 00 ถึง 23 | 18 |
k | ชั่วโมงสองหลัก (ไม่มีศูนย์นำหน้า) ระหว่าง 0 ถึง 23 | 18 |
ผม | ชั่วโมงสองหลัก (โดยมีเลขศูนย์นำหน้า) ระหว่าง 01 ถึง 12 | 06 |
ล | ชั่วโมงสองหลัก (ไม่มีศูนย์นำหน้า) ระหว่าง 1 ถึง 12 | 6 |
ม | นาทีสองหลัก (มีเลขศูนย์นำหน้า) | 05 |
ส | วินาทีสองหลัก (มีศูนย์นำหน้า) | 19 |
ล | มิลลิวินาทีสามหลัก (มีศูนย์นำหน้า) | 047 |
น | นาโนวินาทีเก้าหลัก (มีศูนย์นำหน้า) | 047000000 |
ป | ตัวพิมพ์ใหญ่เช้าหรือบ่าย | น |
น | ตัวพิมพ์เล็กตอนเช้าหรือตอนบ่าย | น |
z | ค่าชดเชยตัวเลข RFC 822 จาก GMT | -0800 |
Z | เขตเวลา | PST |
s | วินาทีตั้งแต่ 1970-01-01 00:00:00 GMT | 1078884319 |
ถาม | มิลลิวินาทีตั้งแต่ 1970-01-01 00:00:00 GMT | 1078884319047 |
มีคลาสที่มีประโยชน์อื่น ๆ ที่เกี่ยวข้องกับวันที่และเวลา สำหรับรายละเอียดเพิ่มเติมคุณสามารถอ้างถึงเอกสาร Java Standard
การแยกสตริงเป็นวันที่
คลาส SimpleDateFormat มีเมธอดเพิ่มเติมบางอย่างโดยเฉพาะ parse () ซึ่งพยายามแยกวิเคราะห์สตริงตามรูปแบบที่เก็บไว้ในวัตถุ SimpleDateFormat ที่กำหนด
ตัวอย่าง
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd");
String input = args.length == 0 ? "1818-11-11" : args[0];
System.out.print(input + " Parses as ");
Date t;
try {
t = ft.parse(input);
System.out.println(t);
} catch (ParseException e) {
System.out.println("Unparseable using " + ft);
}
}
}
ตัวอย่างการรันโปรแกรมข้างต้นจะให้ผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
1818-11-11 Parses as Wed Nov 11 00:00:00 EST 1818
นอนสักพัก
คุณสามารถเข้าสู่โหมดสลีปได้ตั้งแต่หนึ่งมิลลิวินาทีจนถึงอายุการใช้งานของคอมพิวเตอร์ ตัวอย่างเช่นโปรแกรมต่อไปนี้จะเข้าสู่โหมดสลีปเป็นเวลา 3 วินาที -
ตัวอย่าง
import java.util.*;
public class SleepDemo {
public static void main(String args[]) {
try {
System.out.println(new Date( ) + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date( ) + "\n");
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Sun May 03 18:04:41 GMT 2009
Sun May 03 18:04:51 GMT 2009
การวัดเวลาที่ผ่านไป
บางครั้งคุณอาจต้องวัดจุดในเวลาเป็นมิลลิวินาที ลองเขียนตัวอย่างด้านบนอีกครั้ง -
ตัวอย่าง
import java.util.*;
public class DiffDemo {
public static void main(String args[]) {
try {
long start = System.currentTimeMillis( );
System.out.println(new Date( ) + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date( ) + "\n");
long end = System.currentTimeMillis( );
long diff = end - start;
System.out.println("Difference is : " + diff);
} catch (Exception e) {
System.out.println("Got an exception!");
}
}
}
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Sun May 03 18:16:51 GMT 2009
Sun May 03 18:16:57 GMT 2009
Difference is : 5993
คลาส GregorianCalendar
GregorianCalendar คือการนำคลาสปฏิทินไปใช้อย่างเป็นรูปธรรมซึ่งใช้ปฏิทินเกรกอเรียนตามปกติที่คุณคุ้นเคย เราไม่ได้พูดถึงคลาสปฏิทินในบทช่วยสอนนี้คุณสามารถค้นหาเอกสาร Java มาตรฐานสำหรับสิ่งนี้ได้
getInstance( )วิธีการของปฏิทินส่งคืน GregorianCalendar ที่เริ่มต้นด้วยวันที่และเวลาปัจจุบันในตำแหน่งที่ตั้งเริ่มต้นและเขตเวลา GregorianCalendar กำหนดสองฟิลด์: AD และ BC สิ่งเหล่านี้แสดงถึงสองยุคที่กำหนดโดยปฏิทินเกรกอเรียน
นอกจากนี้ยังมีตัวสร้างหลายตัวสำหรับวัตถุ GregorianCalendar -
ซีเนียร์ | ตัวสร้างและคำอธิบาย |
---|---|
1 | GregorianCalendar() สร้าง GregorianCalendar เริ่มต้นโดยใช้เวลาปัจจุบันในเขตเวลาเริ่มต้นด้วยโลแคลเริ่มต้น |
2 | GregorianCalendar(int year, int month, int date) สร้าง GregorianCalendar ด้วยวันที่ที่กำหนดไว้ในเขตเวลาเริ่มต้นด้วยโลแคลเริ่มต้น |
3 | GregorianCalendar(int year, int month, int date, int hour, int minute) สร้าง GregorianCalendar ด้วยวันที่และเวลาที่กำหนดสำหรับโซนเวลาเริ่มต้นด้วยโลแคลเริ่มต้น |
4 | GregorianCalendar(int year, int month, int date, int hour, int minute, int second) สร้าง GregorianCalendar ด้วยวันที่และเวลาที่กำหนดสำหรับโซนเวลาเริ่มต้นด้วยโลแคลเริ่มต้น |
5 | GregorianCalendar(Locale aLocale) สร้าง GregorianCalendar ตามเวลาปัจจุบันในเขตเวลาเริ่มต้นด้วยโลแคลที่กำหนด |
6 | GregorianCalendar(TimeZone zone) สร้าง GregorianCalendar ตามเวลาปัจจุบันในเขตเวลาที่กำหนดด้วยโลแคลเริ่มต้น |
7 | GregorianCalendar(TimeZone zone, Locale aLocale) สร้าง GregorianCalendar ตามเวลาปัจจุบันในเขตเวลาที่กำหนดด้วยโลแคลที่กำหนด |
นี่คือรายการวิธีการสนับสนุนที่เป็นประโยชน์บางประการที่มีให้โดยคลาส GregorianCalendar -
ซีเนียร์ | วิธีการและคำอธิบาย |
---|---|
1 | void add(int field, int amount) เพิ่มระยะเวลาที่ระบุ (เซ็นชื่อ) ลงในฟิลด์เวลาที่กำหนดโดยยึดตามกฎของปฏิทิน |
2 | protected void computeFields() แปลง UTC เป็นมิลลิวินาทีเป็นค่าฟิลด์เวลา |
3 | protected void computeTime() แทนที่ปฏิทินจะแปลงค่าฟิลด์เวลาเป็น UTC เป็นมิลลิวินาที |
4 | boolean equals(Object obj) เปรียบเทียบ GregorianCalendar นี้กับการอ้างอิงวัตถุ |
5 | int get(int field) รับค่าสำหรับฟิลด์เวลาที่กำหนด |
6 | int getActualMaximum(int field) ส่งคืนค่าสูงสุดที่ฟิลด์นี้สามารถมีได้โดยระบุวันที่ปัจจุบัน |
7 | int getActualMinimum(int field) ส่งคืนค่าต่ำสุดที่ฟิลด์นี้สามารถมีได้โดยระบุวันที่ปัจจุบัน |
8 | int getGreatestMinimum(int field) ส่งคืนค่าต่ำสุดสูงสุดสำหรับฟิลด์ที่กำหนดหากแตกต่างกัน |
9 | Date getGregorianChange() รับวันที่เปลี่ยนปฏิทินเกรกอเรียน |
10 | int getLeastMaximum(int field) ส่งคืนค่าสูงสุดต่ำสุดสำหรับฟิลด์ที่กำหนดหากแตกต่างกัน |
11 | int getMaximum(int field) ส่งคืนค่าสูงสุดสำหรับฟิลด์ที่กำหนด |
12 | Date getTime() รับเวลาปัจจุบันของปฏิทินนี้ |
13 | long getTimeInMillis() รับเวลาปัจจุบันของปฏิทินนี้เป็นเวลานาน |
14 | TimeZone getTimeZone() รับเขตเวลา |
15 | int getMinimum(int field) ส่งคืนค่าต่ำสุดสำหรับฟิลด์ที่กำหนด |
16 | int hashCode() แทนที่ hashCode |
17 | boolean isLeapYear(int year) พิจารณาว่าปีที่กำหนดเป็นปีอธิกสุรทินหรือไม่ |
18 | void roll(int field, boolean up) เพิ่มหรือลบ (ขึ้น / ลง) หน่วยเวลาเดียวในฟิลด์เวลาที่กำหนดโดยไม่ต้องเปลี่ยนฟิลด์ขนาดใหญ่ |
19 | void set(int field, int value) ตั้งค่าฟิลด์เวลาด้วยค่าที่กำหนด |
20 | void set(int year, int month, int date) ตั้งค่าสำหรับฟิลด์ปีเดือนและวันที่ |
21 | void set(int year, int month, int date, int hour, int minute) ตั้งค่าสำหรับฟิลด์ปีเดือนวันที่ชั่วโมงและนาที |
22 | void set(int year, int month, int date, int hour, int minute, int second) ตั้งค่าสำหรับฟิลด์ปีเดือนวันที่ชั่วโมงนาทีและวินาที |
23 | void setGregorianChange(Date date) ตั้งค่าวันที่เปลี่ยนแปลง GregorianCalendar |
24 | void setTime(Date date) ตั้งเวลาปัจจุบันของปฏิทินด้วยวันที่ที่กำหนด |
25 | void setTimeInMillis(long millis) ตั้งค่าเวลาปัจจุบันของปฏิทินจากค่ายาวที่กำหนด |
26 | void setTimeZone(TimeZone value) ตั้งค่าโซนเวลาด้วยค่าโซนเวลาที่กำหนด |
27 | String toString() ส่งกลับการแสดงสตริงของปฏิทินนี้ |
ตัวอย่าง
import java.util.*;
public class GregorianCalendarDemo {
public static void main(String args[]) {
String months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep",
"Oct", "Nov", "Dec"};
int year;
// Create a Gregorian calendar initialized
// with the current date and time in the
// default locale and timezone.
GregorianCalendar gcalendar = new GregorianCalendar();
// Display current time and date information.
System.out.print("Date: ");
System.out.print(months[gcalendar.get(Calendar.MONTH)]);
System.out.print(" " + gcalendar.get(Calendar.DATE) + " ");
System.out.println(year = gcalendar.get(Calendar.YEAR));
System.out.print("Time: ");
System.out.print(gcalendar.get(Calendar.HOUR) + ":");
System.out.print(gcalendar.get(Calendar.MINUTE) + ":");
System.out.println(gcalendar.get(Calendar.SECOND));
// Test if the current year is a leap year
if(gcalendar.isLeapYear(year)) {
System.out.println("The current year is a leap year");
}else {
System.out.println("The current year is not a leap year");
}
}
}
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Date: Apr 22 2009
Time: 11:25:27
The current year is not a leap year
สำหรับรายการค่าคงที่ทั้งหมดที่มีอยู่ในคลาสปฏิทินคุณสามารถอ้างอิงเอกสาร Java มาตรฐาน