Kiểu Date Trong Java

Kiểu Date Trong Java

Date trong Java là 1 trong các class mô tả ngày tháng đầu tiên trong Java. Thật đáng tiếc là hầu hết các cách thức của nó đã lỗi thời, và thay vào đó là dùng các cách thức của java.util.Calendar. Nhưng bạn vẫn có thể dùng java.util.Date để mô tả ngày tháng.

1. Các Lớp Date, Time, Calendar Trong Java

Java cung cấp 1 số class liên quan tới thời gian và lịch (Calendar), sau đây là danh sách các class này:

Class Mô tả
java.util.Date 1 lớp đại diện cho ngày tháng năm và thời gian. Tiếc là hầu hết các cách thức của nó đã bị lỗi thời, khuyến cáo là không nên dùng các cách thức đó, tuy nhiên lớp Date vẫn được dùng rỗng rãi.
java.util.concurrent.TimeUnit TimeUnit là 1 Enum mô tả các đơn vị ngày tháng năm và thời gian.
java.sql.Date 1 lớp mô tả ngày tháng năm. Thông tin về thời gian bị cắt bỏ. Lớp này thường dùng trong JDBC.
java.sql.Time 1 lớp mô tả thời gian (Giờ phút giây, milli giây), và không chứa thông tin ngày tháng năm. Lớp này thường dùng trong JDBC.
java.sql.Timestamp 1 lớp mô tả ngày tháng năm và thời gian. Lớp này thường dùng trong JDBC.
java.util.Calendar Lớp mô tả bộ Lịch. Nó có các cách thức toán học về thời gian, chẳng hạn thêm ngày, bớt ngày,…
java.util.GregorianCalendar Là 1 lớp con trực tiếp của java.util.Calendar, mô tả ngày Dương Lịch, bộ lịch được dùng rộng rãi trên thế giới ngày nay. Nó có tất cả các method từ java.util.Calendar để thao tác toán học trên ngày tháng năm và thời gian.
java.util.TimeZone TimeZone là lớp mô tả múi giờ, nó có ích khi bạn làm việc với Lịch trên múi giờ.
java.text.SimpleDateFormat Lớp này giúp bạn chuyển 1 String có định dạng ngày tháng sang kiểu Date và ngược lại

2. System.currentTimeMillis()

CurrentTimeMillis() là 1 method tĩnh của class System. Kết quả trả về khoảng thời gian bằng mili giây tính từ ngày 1-1-1970 cho tới thời điểm hiện tại.

System.currentTimeMillis() thường được dùng để đo khoảng thời gian làm 1 việc gì đó bằng cách gọi method này trước khi bắt đầu công việc, và sau khi hoàn thành công việc.

JobTimeDemo.java

package org.o7planning.tutorial.dt;

public class JobTimeDemo {

   // Đây là cách thức tính tổng các số từ 1 tới 100.
   private static int sum() {
      int sum = 0;
      for (int i = 0; i <= 100; i++) {
         sum += i;
      }
      return sum;
   }

   private static void doJob(int count) {
      // Gọi cách thức 'sum' với số lần cho bởi tham số.
      for (int i = 0; i < count; i++) {
         sum();
      }
   }

   public static void main(String[] args) {
      long millis1 = System.currentTimeMillis();

      doJob(10000);

      long millis2 = System.currentTimeMillis();

      long distance = millis2 - millis1;

      System.out.println("Distance time in milli second: " + distance);
   }
}

Kết quả chạy ví dụ:

Distance time in milli second: 3

3. TimeUnit

TimeUnit là 1 Enum mô tả các đơn vị ngày tháng năm và thời gian. Nó cung cấp các phương pháp có sẵn để chuyển đổi thời gian qua các đơn vị thời gian. TimeUnit khá hữu ích để biết cách diễn giải 1 thời gian nhất định là đơn vị thời gian cần được xem xét. Sự khác biệt nhỏ giữa các khoảng thời gian như micro giây và nano giây có thể được tìm ra bằng cách sử dụng TimeUnit.

Nó hỗ trợ các đơn vị nano giây, micro giây, mili giây, giây, phút, giờ và ngày. Đối với các đơn vị này, TimeUnit chỉ định các hằng số enum tương ứng:

  • Nanoseconds: 1 phần nghìn của micro giây
  • Microseconds: 1 phần nghìn của mili giây
  • Mili giây: 1 phần nghìn giây
  • Giây: 1 giây
  • Phút: 60 giây
  • Giờ: 60 phút
  • Ngày: Hai mươi bốn giờ

Ví dụ 1:

// Java program to demonstrate TimeUnit Class
 
import java.util.concurrent.TimeUnit;
 
public class GFG {
    public static void main(String args[])
    {
        long hours = 96;
 
        // Convert given time (hours)in days
        long days = TimeUnit.DAYS.convert(hours, TimeUnit.HOURS);
 
        // Convert days in minutes
        long minutes = TimeUnit.MINUTES.convert(days, TimeUnit.DAYS);
 
        System.out.println(hours + " Hours = " + days
                           + " Days = " + +minutes
                           + " Minutes");
 
        // Convert given time (minutes) to microseconds
        long micros = TimeUnit.MINUTES.toMicros(minutes);
        System.out.println(minutes + " Minutes = " + micros
                           + " Microseconds");
 
        // Convert given time (microseconds) to seconds
        long seconds = TimeUnit.MICROSECONDS.toSeconds(micros);
        System.out.println(micros + " Microseconds = "
                           + seconds + " Seconds");
 
        // Create TimeUnit object of type Minutes
        TimeUnit time = TimeUnit.valueOf("MINUTES");
        System.out.println("TimeUnit object type: " + time);
    }
}

Kết quả:

96 Giờ = 4 Ngày = 5760 Phút
5760 Phút = 345600000000 Micro giây
345600000000 Microseconds = 345600 giây
Loại đối tượng TimeUnit: MINUTES

Ví dụ 1:

// Java program to demonstrate TimeUnit Class
 
import java.util.concurrent.TimeUnit;
 
public class GFG implements Runnable {
    public void run()
    {
        // Get array of TimeUnit enum constants using
        // values()
        for (TimeUnit unit : TimeUnit.values()) {
            try {
               
                // pause for 1 second
                TimeUnit.SECONDS.sleep(1);
            }
            catch (InterruptedException e) {
                e.printStackTrace();
            }
 
            System.out.println(
                unit + " : "
                + unit.convert(24, TimeUnit.HOURS));
        }
    }
    public static void main(String args[])
    {
        GFG obj1 = new GFG();
        System.out.println("TimeUnit Example");
       
        // Create and start Thread
        Thread t1 = new Thread(obj1);
        t1.start();
       
        System.out.println("Now, thread will run for 5 seconds");
        try {
           
            // Specify Thread join time, here, 5 seconds
            TimeUnit.SECONDS.timedJoin(t1, 5);
        }
        catch (InterruptedException e) {
            e.printStackTrace();
        }
       
        System.out.println("Thread  Execution Paused");
        System.out.println("Resuming Thread Execution...");
    }
}

Kết quả:

Ví dụ về TimeUnit
Bây giờ, chuỗi sẽ chạy trong 5 giây
NANOSECONDS: 86400000000000
MICROSECONDS: 86400000000
TRIỆU GIÂY: 86400000
GIÂY: 86400
Thực thi chuỗi bị tạm dừng
Tiếp tục thực thi chuỗi ...
PHÚT: 14g40
GIỜ: 24
NGÀY: 1

4. Java.Util.Date

Lớp java.util.Date trong java biểu diễn ngày và giờ (date và time). Nó cung cấp các Constructor và cách thức để xử lý date và time trong java.

Lớp java.util.Date implements các giao diện Serializable, Cloneable and Comparable<Date>. Nó được kế thừa bởi các lớp java.sql.Date, java.sql.Time và java.sql.Timestamp.

Sau khi lớp Calendar ra đời, hầu hết các Constructor và cách thức của lớp java.util.Date đã bị khuyến cáo không nên sử dụng nữa (@deprecated).

Các Constructor của lớp java.util.Date trong java

No. Constructor Mô tả
1) Date() Tạo 1 đối tượng Date đại diện cho ngày tháng và thời gian hiện tại.
2) Date(long milliseconds) CTạo 1 đối tượng Date trong 1 mili giây cho trước kể từ ngày 1 tháng 1 năm 1970, 00:00:00 GMT.

Các cách thức của lớp java.util.Date trong java

No. cách thức Mô tả
1) boolean after(Date date) kiểm tra nếu ngày hiện tại là sau ngày đã cho.
2) boolean before(Date date) kiểm tra nếu ngày hiện tại là trước ngày đã cho.
3) Object clone() Trả về đối tượng nhân bản của ngày hiện tại.
4) int compareTo(Date date) So sánh ngày hiện tại với ngày đã cho.
5) boolean equals(Date date) So sánh ngày hiện tại với ngày đã cho.
6) static Date from(Instant instant) Trả về 1 thể hiện của đối tượng Date từ ngày Instant.
7) long getTime() Trả về thời gian được đại diện bởi đối tượng date.
8) int hashCode() Trả về giá trị mã băm cho đối tượng ngày này.
9) void setTime(long time) Thay đổi ngày hiện tại và thời gian cho thời gian đã cho.
10) Instant toInstant() Chuyển đổi date hiện tại thành đối tượng Instant.
11) String toString() Chuyển đổi date hiện tại thành chuỗi String.

Ví dụ về java.util.Date trong java

Dưới đây là ví dụ lấy date trong java và in ra màn hình:

package vn.viettuts.date;
 
import java.util.Date;
 
public class DateExample1 {
    public static void main(String[] args) {
        long miliSeconds = System.currentTimeMillis();
        // cach 1
        Date date1 = new Date();
        System.out.println(date1);
        // cach 2
        Date date2 = new Date(miliSeconds);
        System.out.println(date2);
    }
}

Kết quả:

Mon Sep 11 09:04:18 ICT 2017
Mon Sep 11 09:04:18 ICT 2017

5. Date, Time, Timestamp (java.sql)

java.sql có 3 class liên quan đến ngày tháng và thời gian:

  • java.sql.Date
  • java.sql.Time
  • java.sql.Timestamp

Cụ thể:

– java.sql.Date đại diện cho SQL DATE, lưu trữ năm, tháng và ngày mà không có thành phần thời gian. java.sql. Date đang bỏ qua múi giờ.

– java.sql.Time đại diện cho SQL TIME và chỉ chứa thông tin về giờ, phút, giây và mili giây mà không có thành phần ngày tháng.

– java.sql.Timestamp đại diện cho SQL TIMESTAMP chứa cả thông tin Ngày và Giờ với độ chính xác nano giây.

Những class trên tham gia vào trong PreparedStatement trong JDBC API, chẳng hạn các method setDate, setTime, setTimestamp. Hoặc có thể lấy ra từ ResultSet.

Hãy kiểm tra bảng sau đây đề cập đến 5 cơ sở dữ liệu hàng đầu (không theo thứ tự) các kiểu dữ liệu ngày giờ:

Cơ sở dữ liệu SQL DATE SQL TIME SQL TIMESTAMP Nguồn
MySQL / MariaDB NGÀY
DATETIME
THỜI GIAN TIMESTAMP Liên
kết Liên kết
PostgreSQL NGÀY GIỜ THỜI
GIAN VỚI KHU VỰC THỜI GIAN
TIMESTAMP
TIMESTAMP VỚI KHU VỰC THỜI GIAN
Liên kết
Oracle NGÀY TIMESTAMP
TIMESTAMP VỚI THỜI GIAN KHU VỰC THỜI GIAN
VỚI KHU VỰC GIỜ ĐỊA PHƯƠNG
Liên kết
Microsoft SQL Server DATE
SMALLDATETIME
DATETIME
DATETIME2
DATETIMEOFFSET
THỜI GIAN Liên kết
IBM Db2 NGÀY THỜI GIAN TIMESTAMP Liên kết

6. Java.Util.Calendar

Sơ lược về các bộ lịch:

Gregorian Calendar: Đây chính là Dương Lịch, còn gọi lịch Thiên chúa giáo, là lịch quốc tế. Nó được dùng rộng rãi nhất được đặt tên theo Đức Giáo Hoàng Gregory XIII, người đã giới thiệu nó vào năm 1582.

  • http://en.wikipedia.org/wiki/Gregorian_calendar

Buddhist Calendar: Đây là 1 bộ lịch phật giáo, thường được sử dụng tại một số nước Đông Nam Á trước kia như Thái Lan, Lào, Campuchia, cũng như Sri Lanka. Hiện nay lịch này được dùng trong các lễ hội phật giáo. Và không còn quốc gia nào sử dụng lịch này 1 cách chính thức, các quốc gia này đã đổi sang dùng Gregorian Calendar. Bạn có thể tham khảo thêm thông tin về lịch này tại:

  • http://en.wikipedia.org/wiki/Buddhist_calendar

Japanese Imperial Calendar: Đây là bộ lịch truyền thống của Nhật bản, hiện nay Nhật bản đã chuyển sang sử dụng dương lịch (Gregorian Calendar), tuy nhiên bộ lịch truyền thống vẫn được dùng 1 cách không chính thức.

Calendar là class mô phỏng một hệ thống Lịch. Lớp Calendar trong java là một lớp trừu tượng (abstract) cung cấp phương thức chuyển đổi ngày giữa 1 thời điểm cụ thể theo thời gian và 1 tập hợp các trường của calendar như MONTH, YEAR, HOUR, … Nó kế thừa lớp Object và implements giao diện Comparable.

Calendar có một vài class con:

  • GregorianCalendar
  • JapaneseImperialCalendar
  • BuddhistCalendar

Calendar là 1 class trừu tượng. Nghĩa là bạn không thể khởi tạo nó từ cấu tử (Constructor). Tuy nhiên có 2 method tĩnh để tạo ra đối tượng Calendar.

public static Calendar getInstance();

public static Calendar getInstance(TimeZone zone);

public static Calendar getInstance(Locale aLocale);

public static Calendar getInstance(TimeZone zone,Locale aLocale);

Ví dụ:

// Tạo đối tượng Calendar mô tả thời điểm hiện tại.
// Với Locale mặc định, và TimeZone (múi giờ) mặc định 
// (Của máy tính đang chạy).
Calendar c = Calendar.getInstance();

Khi bạn dùng Calendar.getInstance(TimeZone,Locale) sẽ nhận được trả về là 1 trong các class con nói trên. Mà hầu hết là trả về GregorianCalendar.

Gọi Calendar.getInstance() trả về đối tượng Calendar với tham số TimeZone theo máy tính của bạn và Locale mặc định.

Hãy xem code của class Calendar (JDK7):

Calendar (JDK7)

/**
* Gets a calendar using the default time zone and locale. The
* <code>Calendar</code> returned is based on the current time
* in the default time zone with the default locale.
*
* @return a Calendar.
*/
public static Calendar getInstance()
{
  Calendar cal = createCalendar(TimeZone.getDefaultRef(),
                                  Locale.getDefault(Locale.Category.FORMAT));
  cal.sharedZone = true;
  return cal;
}

/**
* Gets a calendar using the specified time zone and default locale.
* The <code>Calendar</code> returned is based on the current time
* in the given time zone with the default locale.
*
* @param zone the time zone to use
* @return a Calendar.
*/
public static Calendar getInstance(TimeZone zone)
{
  return createCalendar(zone, Locale.getDefault(Locale.Category.FORMAT));
}

/**
* Gets a calendar using the default time zone and specified locale.
* The <code>Calendar</code> returned is based on the current time
* in the default time zone with the given locale.
*
* @param aLocale the locale for the week data
* @return a Calendar.
*/
public static Calendar getInstance(Locale aLocale)
{
  Calendar cal = createCalendar(TimeZone.getDefaultRef(), aLocale);
  cal.sharedZone = true;
  return cal;
}

/**
* Gets a calendar with the specified time zone and locale.
* The <code>Calendar</code> returned is based on the current time
* in the given time zone with the given locale.
*
* @param zone the time zone to use
* @param aLocale the locale for the week data
* @return a Calendar.
*/
public static Calendar getInstance(TimeZone zone,
                                 Locale aLocale)
{
  return createCalendar(zone, aLocale);
}

private static Calendar createCalendar(TimeZone zone,
                                     Locale aLocale)
{
  Calendar cal = null;

  String caltype = aLocale.getUnicodeLocaleType("ca");
  if (caltype == null) {
      // Calendar type is not specified.
      // If the specified locale is a Thai locale,
      // returns a BuddhistCalendar instance.
      if ("th".equals(aLocale.getLanguage())
              && ("TH".equals(aLocale.getCountry()))) {
          cal = new BuddhistCalendar(zone, aLocale);
      } else {
          cal = new GregorianCalendar(zone, aLocale);
      }
  } else if (caltype.equals("japanese")) {
      cal = new JapaneseImperialCalendar(zone, aLocale);
  } else if (caltype.equals("buddhist")) {
      cal = new BuddhistCalendar(zone, aLocale);
  } else {
      // Unsupported calendar type.
      // Use Gregorian calendar as a fallback.
      cal = new GregorianCalendar(zone, aLocale);
  }

  return cal;
}

Một số method quan trọng:

Phương thức get(int) Giá trị trả về
get(Calendar.DAY_OF_WEEK) 1 (Calendar.SUNDAY) tới 7 (Calendar.SATURDAY).
get(Calendar.YEAR) Năm (year)
get(Calendar.MONTH) 0 (Calendar.JANUARY) tới 11 (Calendar.DECEMBER).
get(Calendar.DAY_OF_MONTH) 1 tới 31
get(Calendar.DATE) 1 tới 31
get(Calendar.HOUR_OF_DAY) 0 tới 23
get(Calendar.MINUTE) 0 tới 59
get(Calendar.SECOND) 0 tới 59
get(Calendar.MILLISECOND) 0 tới 999
get(Calendar.HOUR) 0 tới 11, được sử dụng cùng với Calendar.AM_PM.
get(Calendar.AM_PM) 0 (Calendar.AM) hoặc 1 (Calendar.PM).
get(Calendar.DAY_OF_WEEK_IN_MONTH) DAY_OF_MONTH 1 tới 7 luôn luôn tương ứng với DAY_OF_WEEK_IN_MONTH 1;

8 tới 14 tương ứng với DAY_OF_WEEK_IN_MONTH 2, …

get(Calendar.DAY_OF_YEAR) 1 tới 366
get(Calendar.ZONE_OFFSET) Giá trị GMT của múi giờ.
get(Calendar.ERA) Biểu thị AD (GregorianCalendar.AD), BC (GregorianCalendar.BC).

CalendarFieldsDemo.java

package org.o7planning.tutorial.calendar;

import java.util.Calendar;

public class CalendarFieldsDemo {

   public static void main(String[] args) {
      // Tạo một đối tượng Calendar (Lịch) mặc định.
      // Với time zone (múi giờ) và locale mặc định.
      Calendar c = Calendar.getInstance();
      int year = c.get(Calendar.YEAR);

      // Trả về giá trị từ 0 - 11
      int month = c.get(Calendar.MONTH);
      int day = c.get(Calendar.DAY_OF_MONTH);
      int hour = c.get(Calendar.HOUR_OF_DAY);
      int minute = c.get(Calendar.MINUTE);
      int second = c.get(Calendar.SECOND);
      int millis = c.get(Calendar.MILLISECOND);

      System.out.println("Year: " + year);
      System.out.println("Month: " + (month + 1));
      System.out.println("Day: " + day);
      System.out.println("Hour: " + hour);
      System.out.println("Minute: " + minute);
      System.out.println("Second: " + second);
      System.out.println("Minute: " + minute);
      System.out.println("Milli Second: " + millis);

   }

}

Kết quả chạy ví dụ:

Year: 2021
Month: 5
Day: 15
Hour: 20
Minute: 34
Second: 52
Minute: 34
Milli Second: 382

Một số method khác của Calendar:

void set(int calendarField, int value)
void set(int year, int month, int date)
void set(int year, int month, int date, int hour, int minute, int second)

// Thêm hoặc trừ một khoảng thời gian trên một trường (field) của Calendar.
// Dựa trên quy tắc của bộ Lịch.
void add(int field, int amount)

// Cuộn (lên/xuống) một trường (field) của Calendar. 
// roll(): Không làm ảnh hưởng tới các trường khác của Calendar.
void roll(int calendarField, boolean up)

// Cuộn lên (roll up) một trường của Calendar.
// roll(): Không làm ảnh hưởng tới các trường khác của Calendar.
void roll(int calendarField, int amount):

// Trả về đối tượng Date dựa trên giá trị của Calendar.
Date getTime()

void setTime(Date date)

// Trả về số mili giây của đối tượng Calendar này.
long getTimeInMills():

void setTimeInMillis(long millis)

void setTimeZone(TimeZone value)

CalendarDemo.java

package org.o7planning.tutorial.calendar;

import java.util.Calendar;

public class CalendarDemo {

   public static void showCalendar(Calendar c) {
      int year = c.get(Calendar.YEAR);

      // Trả về giá trị từ 0 - 11
      int month = c.get(Calendar.MONTH);
      int day = c.get(Calendar.DAY_OF_MONTH);
      int hour = c.get(Calendar.HOUR_OF_DAY);
      int minute = c.get(Calendar.MINUTE);
      int second = c.get(Calendar.SECOND);
      int millis = c.get(Calendar.MILLISECOND);

      System.out.println(" " + year + "-" + (month + 1) + "-" + day //
            + " " + hour + ":" + minute + ":" + second + " " + millis);
   }

   public static void main(String[] args) {
      // Tạo đối tượng Calendar, mô tả thời điểm hiện tại.
      // Với time zone (múi giờ) và locale mặc định.
      Calendar c = Calendar.getInstance();

      System.out.println("First calendar info");
      showCalendar(c);

      // roll(..): Cuộn một trường (field) của Calendar.
      // roll(..): Không làm thay đổi các trường khác.
      // Ví dụ: Cuộn lên thêm một giờ (boolean up = true)
      c.roll(Calendar.HOUR_OF_DAY, true);

      System.out.println("After roll 1 hour");
      showCalendar(c);

      // roll(..): Không làm thay đổi các trường khác của Calendar.
      // Cuộn xuống một giờ (boolean up = false)
      c.roll(Calendar.HOUR_OF_DAY, false);

      System.out.println("After roll -1 hour");
      showCalendar(c);

      // add(..): Có thể làm thay đổi các trường khác của Calendar.
      // Tăng thêm một giờ (boolean up = true)
      c.add(Calendar.HOUR_OF_DAY, 1);

      System.out.println("After add 1 hour");
      showCalendar(c);

      // roll(..): Không làm thay đổi các trường khác của Calendar.
      // Cuộn xuống 30 ngày.
      c.roll(Calendar.DAY_OF_MONTH, -30);

      System.out.println("After roll -30 day");
      showCalendar(c);

      // add(..): Có thể làm thay đổi các trường khác của Calendar.
      // Thêm 30 ngày.
      c.add(Calendar.DAY_OF_MONTH, 30);
      System.out.println("After add 30 day");
      showCalendar(c);

   }

}

Kết quả chạy ví dụ:

First calendar info
 2021-5-15 20:35:27 395
After roll 1 hour
 2021-5-15 21:35:27 395
After roll -1 hour
 2021-5-15 20:35:27 395
After add 1 hour
 2021-5-15 21:35:27 395
After roll -30 day
 2021-5-16 21:35:27 395
After add 30 day
 2021-6-15 21:35:27 395

7. Chuyển Đổi Kiểu Dữ Liệu Giữa Date Và Timestamp Trong Java

Date ở đây là class thuộc gói java.util

Timestamp là class thuộc gói java.sql

Các bạn cùng Techacademy tìm hiểu ví dụ sau đây để hiểu cách chuyển đổi cụ thể ra sao nhé.

Ví dụ Chuyển Date thành Timestamp và Timestamp thành Date

package com.ngockhuong;

import java.sql.Timestamp;
import java.util.Date;

public class DateToTimestamp {
   public static void main(String[] args) {
      // lấy ngày giờ hiện tại
      Date now = new Date();
      System.out.println(now);
      
      // chuyển Date sang Timestamp
      Timestamp timestamp = new Timestamp(now.getTime());
      System.out.println(timestamp);
      
      // chuyển Timestamp sang Date 
      Date last = new Date(timestamp.getTime());
      System.out.println(last);
   }
}

Kết quả:

Tue Feb 14 01:53:24 ICT 2017
2017-02-14 01:53:24.981
Tue Feb 14 01:53:24 ICT 2017

8. Chuyển Đổi Kiểu Dữ Liệu Giữa String Và Date Trong Java

Các bạn có thể chuyển đổi String thành Date trong java bằng cách sử dụng phương thức parse() của các lớp DateFormat và SimpleDateFormat. Để tìm hiểu sâu hơn về 2 khái niệm này, bạn có thể tham khảo lớp DateFormat và lớp SimpleDateFormat.

Ví dụ về chuyển đổi String thành Date trong java

Ví dụ 1:

import java.text.SimpleDateFormat;
import java.util.Date;
 
public class StringToDateExample1 {
    public static void main(String[] args) throws Exception {
        String sDate = "17/07/2017";
        Date date = new SimpleDateFormat("dd/MM/yyyy").parse(sDate);
        System.out.println(sDate + "\t" + date);
    }
}

Kết quả:

17/07/2017 Mon Jul 17 00:00:00 ICT 2017

Ví dụ 2: Các kiểu khác của chuyển đổi String thành Date trong java

import java.text.SimpleDateFormat;
import java.util.Date;
 
public class StringToDateExample2 {
    public static void main(String[] args) throws Exception {
        String sDate1 = "12/7/2017";
        String sDate2 = "12-07-2017";
        String sDate3 = "12/7/2017 13:30:50";
        String sDate4 = "12-07-2017 13:30:50";
        SimpleDateFormat formatter1 = new SimpleDateFormat("dd/MM/yyyy");
        SimpleDateFormat formatter2 = new SimpleDateFormat("dd-MM-yyyy");
        SimpleDateFormat formatter3 = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
        SimpleDateFormat formatter4 = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
        Date date1 = formatter1.parse(sDate1);
        Date date2 = formatter2.parse(sDate2);
        Date date3 = formatter3.parse(sDate3);
        Date date4 = formatter4.parse(sDate4);
        System.out.println(sDate1 + "\t" + date1);
        System.out.println(sDate2 + "\t" + date2);
        System.out.println(sDate3 + "\t" + date3);
        System.out.println(sDate4 + "\t" + date4);
    }
}

Kết quả:

12/7/2017 Wed Jul 12 00:00:00 ICT 2017
12-07-2017 Wed Jul 12 00:00:00 ICT 2017
12/7/2017 13:30:50 Wed Jul 12 13:30:50 ICT 2017
12-07-2017 13:30:50 Wed Jul 12 13:30:50 ICT 2017

9. Tùy Biến Định Dạng Date, Time

Tùy biến định dạng Date. Hãy xem 1 số ví dụ định dạng và kết quả trả về.

Khuôn mẫu Kết quả
dd.MM.yy 30.06.09
yyyy.MM.dd G ‘at’ hh:mm:ss z 2009.06.30 AD at 08:29:36 PDT
EEE, MMM d, ”yy Tue, Jun 30, ’09
h:mm a 8:29 PM
H:mm 8:29
H:mm:ss:SSS 8:28:36:249
K:mm a,z 8:29 AM,PDT
yyyy.MMMMM.dd GGG hh:mm aaa 2009.June.30 AD 08:29 AM

Tham khảo bảng sau đây cho một số ngày và thời gian phổ biến được dùng trong java.text.SimpleDateFormat

Ký hiệu Ý nghĩa Trả về Example
G Kỷ nguyên Text AD
y Năm Number 2009
M Tháng trong năm Text & Number July & 07
d Ngày trong tháng Number 10
h Giờ am/pm (1-12) Number 12
H Giờ trong ngày (0-23) Number 0
m Phút trong giờ Number 30
s Giây trong phút Number 55
S millisecond Number 978
E Ngày trong tuần Text Tuesday
D Ngày trong năm Number 189
F Ngày của tuần trong tháng Number 2 (2nd Wed in July)
w Tuần trong năm Number 27
W Tuần trong tháng Number 2
a am/pm Text PM
k Giờ trong ngày (1-24) Number 24
K Giờ am/pm (0-11) Number 0
z Múi giờ (time zone) Text Pacific Standard Time
escape for text Delimiter (none)
single quote Literal

10. Kiểu Ngày Tháng Trong Java

Dưới đây là 1 số lớp hỗ trợ kiểu dữ liệu ngày giờ:

  • java.util.Date: Một lớp đại diện cho ngày tháng năm và thời gian. Tiếc là hầu hết các phương thức của nó đã bị lỗi thời, khuyến cáo là không nên sử dụng các phương thức đó, tuy nhiên lớp Date vẫn được sử dụng rỗng rãi.
  • java.sql.Date: Một lớp mô tả ngày tháng năm. Thông tin về thời gian bị cắt bỏ. Lớp này thường sử dụng trong JDBC.
  • java.util.Calendar: Lớp mô tả bộ Lịch. Nó có các phương thức toán học về thời gian, chẳng hạn thêm ngày, bớt ngày,…
  • java.time.*: Lớp này cung cấp đầy đủ các API xử lý ngày giờ trong Java. Đây là lớp mới được hỗ trợ từ Java 8.

11. Ép Kiểu Date Sang  String Trong Java

Các bạn cũng có thể dùng hàm String() hoặc phương thức toString()

String(Date())  // Trả về "Thu Jul 17 2021 15:38:19 GMT+0200 (W. Europe Daylight Time)"

Dùng toString() cũng cho kết quả tương tự.

Date().toString()  // Trả về "Thu Jul 17 2014 15:38:19 GMT+0200 (W. Europe Daylight Time)"

12. Khai Báo Date Trong Java

Cú pháp khai báo date đơn giản như sau:

new Date(...);

 

Bài viết liên quan

Leave a Reply

Your email address will not be published. Required fields are marked *

Hotline: 0984.876.750
Chat Facebook
Gọi điện ngay