การใช้ java.util.Date

| ไอที | Java | 17537

รู้จัก และใช้ java.util.Date กับ method ต่าง ๆ

Date เป็นคลาส หนึ่ง ในคลาสมาตรฐานของ java ซึ่งอยู่ใน java.util.Date

Date ก็คือเวลา ดังนั้น ในคลาสนี้จึงเป็นคลาสที่จัดการเกี่ยวกับเวลา

ในการเขียนโปรแกรมต่าง ๆ ส่วนมาก มักมีวันที่มาเกี่ยวข้อง ไม่ว่าจะเป็นวันที่บันทึกข้อมูล วันที่แก้ไขข้อมูล ยิ่งโปรแกรใหญ่ ๆ ปฏิทินวันที่ ยิ่งเป็นสิ่งที่ขาดไม่ได้เลย ดังนั้นในบทความนี้ เรามาดูคลาส ซึ่งเป็นคลาสหนึ่งใน Java.util.Date ซึ่งเป็นคลาสที่จัดการเกี่ยวกับวันที่ และเวลา

สิ่งที่ควรรู้ก่อนเขียน java.util.Date และอ่านบทความ

year ในที่นี้ก็คือ ปี ลบด้วย 1900(y-1900)
month ก็คือเดือน แต่จะถูกแทนด้วย 0 ถึง 11 ซึ่ง 0 ก็คือเดือนมกราคม, 1 กุมภาพันธ์ ... 11 ธันวาคม
date ซึ่งก็คือวันที่แสดงตามวันที่ปกติ นั่นคือ 1-31
hour ก็คือชั่วโมง จะถูกแทนด้วย 0-23 ดังนั้น 0 จะแทนเที่ยงคืนถึงตี 1...
minute ก็คือนาที จะแสดงตามนาทีปกติ นั่นคือ 0-59
second ก็คือวินาที จะถูกกำหนดโดย 0-61 นั่นคือ จะมีวินาทีเป็น 60 หรือ 61 นั่น ก็ต้องดูว่าเป็น leap second หรือเปล่า

Constructor ใน java.util.Date

Date()
Date(int year,int month,int date)
Date(int year, int month, int date, int hrs, int min)
Date(int year, int month, int date, int hrs, int min, int sec)
Date(long date)
Date(String s)

ตัวอย่างการสร้าง Object Date

import java.util.Date;

public class DateIndex {
    public static void main(String[] args){
        Date currentDate = new Date();
        System.out.println(currentDate); // ตัวอย่าง output Tue Sep 04 10:09:14 ICT 2012
    }
}
ตัวอย่างแรกเป็นตัวอย่างที่สร้าง Object Date โดยไม่มีพารามิเตอร์ นั่นคือ การสร้าง Object ที่มีค่าวันเวลา ณ ปัจจุบันที่รันนั่นเอง
import java.util.Date;

public class DateIndex {
    public static void main(String[] args){
        Date epoch = new Date(0);
        System.out.println(epoch ); // output Thu Jan 01 07:00:00 ICT 1970
        Date increaseEpoch = new Date(1000);
        System.out.println(increaseEpoch); // output Thu Jan 01 07:00:01 ICT 1970
        Date reduceEpoch = new Date(-1000);
        System.out.println(reduceEpoch); // output Thu Jan 01 06:59:59 ICT 1970
    }
}
ตัวอย่างนี้เป็นการสร้าง Object Date ที่รับพารามิเตอร์เป็นชนิด long โดยค่าที่รับมาจะเป็นมิลลิวินาที โดยอ้างอิง(มิลลิวินาทีที่ 0)ที่ Thu Jan 01 07:00:00 ICT 1970
import java.util.Date;

public class DateIndex {
    public static void main(String[] args){
        Date assignDate = new Date(2012-1900, 8, 3);
        System.out.println(assignDate); // output Mon Sep 03 00:00:00 ICT 2012
        Date assignDate2 = new Date(2012-1900, 8, 3, 12, 45);
        System.out.println(assignDate2); // output Mon Sep 03 12:45:00 ICT 1922
        Date assignDate3 = new Date(2012-1900, 8, 3, 12, 45, 30);
        System.out.println(assignDate3); // output Mon Sep 03 12:45:30 ICT 1922
    }
}
ตัวอย่างนี้เป็นการสร้าง Object Date ที่รับพารามิเตอร์เป็นชนิด วัน เดือน ปี เวลา หรือพูดง่าย ๆ ก็คือ เป็นการสร้างเวลา ตามเราต้องการนั่นเอง จาก constructor ใน java.util.Date และจากตัวอย่าง เราสามารถกำหนด วัน เดือน ปี หรือ วัน เดือน ปี ชั่วโมง นาที หรือ วัน เดือน ปี ชั่วโมง นาที และวินาที โดยทั้งสามรูปแบบ อันไหนไม่ถูกกำหนดก็จะมีค่าเป็น 0
จากตัวอย่างข้างบน เรากำหนดปีเป็นคริสตร์ศักราช และลบด้วย 1900 ส่วนเดือนนั้น เลข 8 ก็คือเดือน กันยายน นอกนั้นก็ตามปกติ
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateIndex {
    public static void main(String[] args) throws ParseException{
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Date assignDate = df.parse("2555-09-03");
        System.out.println(assignDate); // output Mon Sep 03 00:00:00 ICT 2012
    }
}
ตัวอย่างนี้เป็นการสร้าง Object Date ที่รับค่ามาจาก Object DateFormat โดยใช้ method parse เป็นการกำหนดค่าโดยมีรูปแบบที่กำหนดไว้ โดยการใช้งานจะต้อง มีการจัดการกับ Exception ด้วยครับ ซึ่ง DateFormat เดี๋ยวผมจะมาอธิบายคลาสนี้ในคราวหลังครับ

ตัวอย่างการใช้งาน method ของ Object Date

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateIndex {
    public static void main(String[] args) throws ParseException{
        DateFormat df = new SimpleDateFormat ("yyyy-MM-dd");
        Date d1 = df.parse("2555-01-01");
        Date d2 = df.parse("2555-01-02");
        String relation = null;
        if (d1.equals(d2)) relation = "the same date as";
        else if (d1.before(d2)) relation = "before";
        else if (d1.after(d2)) relation = "after";
        System.out.println(d1 + " is " + relation + " " + d2);
    }
}
ตัวอย่างนี้ เป็นการสร้าง Object Date สองตัวแล้วนำมาเปรียบเทียบว่า วันแรก เท่ากับ ก่อน หรือหลัง วันที่สอง โดยใช้ method equals ในการตรวจสอบว่าเท่ากันหรือเปล่า ใช้ method before ในการตรวจสอบว่าเป็นวันเวลาก่อนหรือเปล่า ใช้ method after ในการตรวจสอบว่าเป็นวันหลังหรือเปล่า
import java.util.Date;

public class DateIndex {
    public static void main(String[] args){
        Date epoch = new Date(2012-1900, 8, 1);
        Date today = new Date(2012-1900, 8, 4);
        
        long diff = today.getTime() - epoch.getTime();
		System.out.println("ทั้งสองวันแตกต่างกัน " + (diff / (1000*60*60*24)) + " วัน"); 
		// output ทั้งสองวันแตกต่างกัน 3 วัน
    }
}
ตัวอย่างนี้ เป็นการสร้าง Object Date สองตัวแล้วนำมาเปรียบเทียบว่า Object ทั้งสองแตกต่างกันกี่วัน โดยใช้ฟังก์ชัน getTime ซึ่ง method นี้จะคืนค่าเป็น มิลลิวินาทีเมื่อเทียบกับ Thu Jan 01 07:00:00 ICT 1970
import java.util.Date;

public class DateIndex {
    public static void main(String[] args){
        Date date = new Date(2012-1900, 8, 1);
        System.out.println(date); // output Sat Sep 01 00:00:00 ICT 2012
        long msec = date.getTime();
        msec += 3 * 24 * 60 * 60 * 1000L;
        date.setTime(msec);
        System.out.println(date); // output Tue Sep 04 00:00:00 ICT 2012
    }
}
ตัวอย่างนี้ สร้าง Object Date ซึ่งมีค่าเป็นเวลา ณ วันที่ 1 กันยายน 2012 แล้วทำการ getTime ออกมาเมื่อเทียบกับ Thu Jan 01 07:00:00 ICT 1970 จากนั้นนำ ค่า getTime ที่ได้มาบวกเพิ่มอีก 3 วัน นั่นคือ 3 * 24 * 60 * 60 * 1000 มิลลิวินาที จากนั้น ใช้ setTime ให้กับ Object จึงได้ค่าเวลา 3 วันถัดไป
comments