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 มาตรฐาน