Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีหาเวลาในมิลลิวินาทีจากวันที่และเวลาที่กำหนดใน Java


คลาส java.text.SimpleDateFormat ใช้สำหรับจัดรูปแบบและแปลงสตริงเป็นวันที่ และวันที่เป็นสตริง

ขั้นตอนการแปลง

  1. สร้างอ็อบเจกต์ SimpleDateFormat โดยส่งรูปแบบวันที่ที่ต้องการ
  2. แปลงสตริงวันที่เป็นอ็อบเจกต์ Date ด้วยเมธอด parse()
  3. ดึงค่า epoch time (มิลลิวินาทีจาก 1 ม.ค. 1970) ด้วยเมธอด getTime()

ตัวอย่าง 1: ใช้ SimpleDateFormat

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

public class Sample {
    public static void main(String args[]) throws ParseException {
        // กำหนดรูปแบบวันที่
        SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
        
        // แปลงสตริงเป็น Date
        String str = "25-08-2009 11:20:45";
        Date date = dateFormatter.parse(str);
        
        // ดึงค่ามิลลิวินาที
        long msec = date.getTime();
        System.out.println("Epoch ของวันที่กำหนด: " + msec);
    }
}

ผลลัพธ์

Epoch ของวันที่กำหนด: 1251179445000

ตัวอย่าง 2: ใช้ Calendar

สามารถตั้งค่าวันที่และเวลาให้อ็อบเจกต์ Calendar ด้วยเมธอด set() แล้วดึงค่าด้วย getTimeInMillis()

import java.util.Calendar;

public class Sample {
    public static void main(String args[]) {
        Calendar cal = Calendar.getInstance();
        // ปี, เดือน(0-11), วัน, ชั่วโมง, นาที, วินาที
        cal.set(2014, 9, 11, 10, 25, 30);
        long msec = cal.getTimeInMillis();
        System.out.print(msec);
    }
}

ผลลัพธ์

1413003330758

ตัวอย่าง 3: ใช้ ZonedDateTime (Java 8+)

ใช้เมธอด of() สร้าง ZonedDateTime แล้วแปลงเป็น Instant และดึงค่าด้วย toEpochMilli()

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class Sample {
    public static void main(String args[]) {
        // สร้าง ZonedDateTime พร้อมโซนเวลา
        ZoneId id = ZoneId.of("Asia/Bangkok");
        ZonedDateTime obj = ZonedDateTime.of(2014, 9, 11, 10, 25, 30, 0, id);
        
        Instant instant = obj.toInstant();
        long msec = instant.toEpochMilli();
        System.out.println("Milli Seconds: " + msec);
    }
}

ผลลัพธ์

Milli Seconds: 1410411330000

สรุปวิธีการ

คลาส/เมธอดเวอร์ชัน Javaคำอธิบาย
SimpleDateFormat + Date.getTime()Java 1.1+แบบเก่า ยังใช้งานได้ แต่ไม่แนะนำสำหรับโปรเจกต์ใหม่
Calendar.getTimeInMillis()Java 1.1+คลาสเก่า มีปัญหาเรื่อง thread-safety
ZonedDateTime.toInstant().toEpochMilli()Java 8+แนะนำให้ใช้ รองรับ Time Zone ได้ดี