Cấp bậc tác giả:

JAVA

Định dạng Date và Time

Được viết bởi webmaster ngày 21/02/2014 lúc 08:59 AM
Java cung cấp lớp Date có sẵn trong gói java.util, lớp này đóng gói(encapsulate) ngày và thời gian hiện tại.
  • 0
  • 8588

Định dạng Date và Time


Lớp Date hỗ trợ tới 2 hàm dựng. 
Hàm dựng đầu tiên khởi tạo đối tượng với ngày và thời gian
Date()
Hàm dựng tiếp theo cho phép đối số bằng số mili giây đã xảy ra kể từ nửa đêm ngày 1 tháng 1 năm 1970
Date(long millisec)
Khi đối tượng Date có sẵn, có thể gọi bất kỳ phương thức hỗ trợ sau để sử dụng
STTMô tả phương thức
1
boolean after(Date date)
Trả về True nếu đối tượng Date có ngày sau ngày quy định, nếu không thì trả về false
2
boolean before(Date date)
Trả về True nếu đối tượng Date có ngày trước ngày quy định, nếu không thì trả về false
3
Object clone()
Bản sao của đối tượng
4
int compareTo(Date date)
So sánh giá trị của đối tượng được gọi với ngày. Trả lại 0 nếu giá trị bằng. Trả lại giá trị âm nếu đối tượng được gọi sớm hơn ngày. Trả lại giá trị dương nếu đối tượng được gọi sau ngày.
5
 int compareTo(Object obj)
Hoạt động hệt như compareTo(Date date) nếu obj của lớp Date. Nếu không nó sẽ ném một ClassCastException
6
boolean equals(Object date)
Trả về true nếu đối tượng Date được gọi có chứa cùng thời gian và ngày như quy định Date, nếu không, nó trả về false.
7
long getTime()
Trả về số mili giây đã trôi qua kể từ ngày 01 tháng 1 năm 1970.
8
int hashCode( )
Trả về hash Code cho các đối tượng cách gọi.
9
void setTime(long time)
Thiết lập thời gian và ngày theo quy định của Date, đại diện cho thời gian trôi qua trong mili giây từ nửa đêm, ngày 1 tháng 1 năm 1970
10
String toString( )
Chuyển đổi đối tượng Date được gọi vào chuỗi và trả về kết quả.

Lấy Ngày và Thời gian hiện tại

Bạn có thể sử dụng đối tượng Date đơn giản với phương thức toString() để in ngày và thời gian hiện tại như sau:
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());
   }
}
Kết quả trả về:

Mon February 17 09:51:52 CDT 2014

So sánh ngày:

Có ba cách để so sánh hai ngày với nhau:
  • Có thể sử dụng getTime() để có được số mili giây đã trôi qua kể từ nửa đêm, 01 tháng 1 năm 1970, cho cả hai đối tượng và sau đó so sánh hai giá trị.
  • Có thể sử dụng các phương thức before( ), after( ), and equals( ). Vì ngày 12 của tháng trước ngày 18, ví dụ, new Date(99, 2, 12).before(new Date (99, 2, 18)) trả về true.
  • Có thể sử dụng phương thức compareTo(), được xác định bởi interface Comparable và được Date thực thi.
Định dạng ngày sử dụng SimpleDateFormat:

SimpleDateFormat là lớp concrete để định dạng và phân tách ngày. SimpleDateFormat cho phép chọn bất kỳ mẫu người dùng định nghĩa cho định dạng date-time. 

Ví dụ:

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));
   }
}

Kết quả trả về:

Current Date: Mon 2014.02.17 at 04:14:09 PM PDT

Code định dạng DateFormat đơn giản

Để xác định các định dạng thời gian, sử dụng chuỗi mô tả thời gian.
Ký tựMô tảVí dụ
GThời kỳAD
yNăm với 4 chữ số2014
MTháng trong nămJuly hoặc 07
dNgày trong năm10
hGiờ AM / PM (1 ~ 12)12
HGiờ trong ngày (0 ~ 23)22
mPhút trong giờ30
sGiây trong phút55
SMillisecond234
ENgày trong tuầnTuesday
DNgày trong năm360
FNgày của tuần trong tháng2
wTuần trong năm 40
WTuần trong tháng1
aAM / PMPM
kGiờ trong ngày (1 ~ 24)24
KGiờ AM / PM (0 ~ 11)10
zMúi giờGiờ chuẩn mùa đông
'Thoát văn bảnDấu phân cách
"Chú thích`

Định dạng ngày sử dụng printf:

Định dạng Ngày và thời gian có thể được thực hiện rất dễ dàng sử dụng phương thức printf. Bạn sử dụng định dạng hai chữ, bắt đầu với t và kết thúc bằng một trong các chữ cái của bảng dưới đây. 

Ví dụ:

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()
     String str = String.format("Ngày/Thời gian hiện tại : %tc", date );

     System.out.printf(str);
  }
}

Kết quả hiển thị:

Ngày/Thời gian hiện tại : Sat Dec 15 16:37:57 MST 2012

Nhìn thật rối.
Vì lý do đó, một chuỗi định dạng sẽ chỉ ra chỉ số của các đối số phải được định dạng.

Chỉ số phải ngay lập tức làm theo % và kết thúc bởi $. 

Ví dụ:

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.printf("%1$s %2$tB %2$td, %2$tY", 
                         "Due date:", date);
   }
}

Kết quả hiển thị:

Due date: February 09, 2004

Ngoài ra, bạn có thể sử dụng < flag. Nó chỉ ra rằng ltrong đặc điểm kỹ thuật định dạng trước nên được sử dụng một lần nữa. 

Ví dụ:

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);
   }
}

Kết quả hiển thị:

Due date: February 09, 2004

Chuỗi ký tự chuyển đổi Date và Time

Ký tựMô tảVí dụ
cToàn bộ Ngày và thời gianMon May 04 09:51:52 CDT 2009
FNgày theo chuẩn ISO 86012004-02-09
DTheo định dạng của Mỹ(tháng/ngày/năm)02/09/2004
T24 giờ18:05:19
r12 giờ06:05:19 pm
RThời gian 24 giờ, không có giây18:05
YNăm bốn chữ số (với zero đầu)2004
yCuối cùng hai chữ số của năm (với zeroes đầu)04
CHai chữ số của năm (với zeroes đầu)20
BTên đầy đủ thángFebruary
bTên viết tắt tên thángFeb
mHai chữ số tháng (với zero đầu)02
dNgày hai chữ số (với zero đầu)03
eNgày hai chữ số (không có hàng zero)9
ATên đầy đủ ngày trong tuầnMonday
aTên các ngày trong tuần viết tắtMon
jNgày ba chữ số của năm (với zeroes đầu)069
HGiờ hai chữ số (với zeroes đầu), giữa 00 và 2318
kGiờ hai chữ số (không có zeros đầu), giữa 0 và 2318
IGiờ hai chữ số (với zeroes đầu), giữa 01 và 1206
lGiờ hai chữ số (không có zero đầu), từ 1 đến 126
MPhút hai chữ số (với zeroes đầu)05
SGiây hai chữ số (với zeroes đầu)19
LMili giây ba chữ số (với zeroes đầu)047
NNano giây chín chữ số (với zeroes đầu)047000000
PBuổi sáng hoặc buổi chiều chữ HoaPM
pBuổi sáng hoặc buổi chiều chữ thườngpm
zRFC 822 số bù từ GMT-0800
ZMúi giờPST
sGiây kể từ 1970-01-01 00:00:00 GMT1078884319
QMili giây kể từ 1970-01-01 00:00:00 GMT1078884319047

Còn có các lớp hữu ích khác liên quan đến ngày và thời gian.

Ép kiểu String thành Date:

Lớp SimpleDateFormat có một số phương thức bổ sung, đặc biệt là parse(), phân tích chuỗi theo định dạng lưu trữ trong các đối tượng SimpleDateFormat. 

Ví dụ:
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); 
      }
   }
}

Kết quả hiển thị:

$ java DateDemo
1818-11-11 Parses as Wed Nov 11 00:00:00 GMT 1818
$ java DateDemo 2007-12-01
2007-12-01 Parses as Sat Dec 01 00:00:00 GMT 2007

Đây là bài ví dụ về Nhân viên, hiển thị thông tin nhân viên, trong đó có Ngày sinh, đầu vào là chuỗi ngày sinh, được Convert sang định dạng kiểu ngày cho phù hợp với thực tế bài toán

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package java05;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author DOTNETGROUP
 */
public class NhanVien {

    /**
     * @param args the command line arguments
     */
    private String maNV;
    private String hoTen;
    private String ngaySinh;
    private boolean gioiTinh;
    String matKhau;
    private String cmnd;
    String diaChi;
    String tel;
    double heSoLuong;
    boolean status;
    
    public NhanVien(){}
    public NhanVien(String maNV_, String hoTen_, String ngaySinh_)
    {
        this.maNV=maNV_;
        this.hoTen=hoTen_;
        this.ngaySinh = ngaySinh_;
    }
    
    public String toString()
    {
        SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
        Date t = null;
        try {
            t = ft.parse(ngaySinh);
        } catch (ParseException ex) {
            Logger.getLogger(NhanVien.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "Ma nhan vien: " + maNV + "\nHo ten: " + hoTen + "\nNgay sinh: " + ft.format(t);
    }
    
    public static void main(String[] args) {
        
        // TODO code application logic here
        NhanVien nv=new NhanVien("NV01", "Nguyen Van A","1989-04-21");
        System.out.println(nv.toString());
        
    }

    /**
     * @return the maNV
     */
    public String getMaNV() {
        return maNV;
    }

    /**
     * @param maNV the maNV to set
     */
    public void setMaNV(String maNV) {
        this.maNV = maNV;
    }

    /**
     * @return the hoTen
     */
    public String getHoTen() {
        return hoTen;
    }

    /**
     * @param hoTen the hoTen to set
     */
    public void setHoTen(String hoTen) {
        this.hoTen = hoTen;
    }

    /**
     * @return the gioiTinh
     */
    public boolean isGioiTinh() {
        return gioiTinh;
    }

    /**
     * @param gioiTinh the gioiTinh to set
     */
    public void setGioiTinh(boolean gioiTinh) {
        this.gioiTinh = gioiTinh;
    }

    /**
     * @return the cmnd
     */
    public String getCmnd() {
        return cmnd;
    }

    /**
     * @param cmnd the cmnd to set
     */
    public void setCmnd(String cmnd) {
        this.cmnd = cmnd;
    }

    /**
     * @return the ngaySinh
     */
    public String getNgaySinh() {
        return ngaySinh;
    }

    /**
     * @param ngaySinh the ngaySinh to set
     */
    public void setNgaySinh(String ngaySinh) {
        this.ngaySinh = ngaySinh;
    }
    
}
Kết quả:

bai-toan-nhan-vien.jpg

Sử dụng Sleep

Bạn có thể sleep cho bất kỳ khoảng thời gian từ một phần nghìn giây đến giới hạn của máy tính. 
Ví dụ, chương trình sau sẽ hiển thị sau 10 giây:

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!"); 
      }
   }
}
Kết quả hiển thị:

Sun May 03 18:04:41 GMT 2009

Sun May 03 18:04:51 GMT 2009

Đo thời gian

Đôi khi, bạn có thể cần phải đo điểm thời gian trong mili giây. Viết lại ví dụ trên:

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!");
      }
   }
}

Kết quả hiển thị:

Sun May 03 18:16:51 GMT 2009

Sun May 03 18:16:57 GMT 2009

Difference is : 5993

Lớp GregorianCalendar

GregorianCalendar thực hiện Lịch dương lịch bình thường mà bạn đã quen thuộc. Tôi không thảo luận về lớp Calendar trong hướng dẫn này, bạn có thể tìm tài liệu Java chuẩn để hiểu thêm.

Phương thức getInstance() trả về GregorianCalendar khởi tạo với ngày giờ hiện tại trong vùng miền cục bộ mặc định và múi giờ. GregorianCalendar xác định hai vùng: AD và BC. Đại diện cho hai thời kỳ được xác định theo lịch Gregorian.

Một số hàm dựng của đối tượng GregorianCalendar:

STTMô tả hàm dựng
1GregorianCalendar()
Dựng GregorianCalendar mặc định sử dụng thời gian hiện tại trong múi giờ mặc định với mặc định địa phương.
2GregorianCalendar(int year, int month, int date) 
Dựng GregorianCalendar với ngày được thiết lập trong múi giờ mặc định với mặc định địa phương.
3GregorianCalendar(int year, int month, int date, int hour, int minute) 
Dựng GregorianCalendar với ngày nhất định và thời gian thiết lập cho múi giờ mặc định với mặc định địa phương.
4GregorianCalendar(int year, int month, int date, int hour, int minute, int second) 
Dựng GregorianCalendar với ngày nhất định và thời gian cài cho múi giờ mặc định với mặc định địa phương.
5GregorianCalendar(Locale aLocale) 
Dựng GregorianCalendar dựa trên thời gian hiện tại trong múi giờ mặc định với miền địa phương nhất định.
6GregorianCalendar(TimeZone zone) 
Dựng GregorianCalendar dựa trên thời gian hiện tại trong múi giờ địa phương.
7GregorianCalendar(TimeZone zone, Locale aLocale) 
Dựng GregorianCalendar dựa trên thời gian hiện tại trong múi giờ với miền địa phương.

Đây là danh sách các phương thức hỗ trợ hữu ích được cung cấp bởi lớp GregorianCalendar:

STTMô tả phương thức
1void add(int field, int amount)
Thêm quy định (ký hiệu) lượng thời gian cho các trường thời gian, dựa trên các quy tắc của calendar.
2protected void computeFields() 
Chuyển đổi UTC như phần nghìn giây đến giá trị trường thời gian.
3protected void computeTime() 
Ghi đè Calendar Chuyển đổi giá trị trường thời gian UTC là mili giây.
4boolean equals(Object obj) 
So sánh GregorianCalendar đến đối tượng tham chiếu.
5int get(int field)
Lấy giá trị trường thời gian nhất định.
6int getActualMaximum(int field)
Trả lại giá trị tối đa mà trường này có thể có, đưa ra ngày hiện tại.
7int getActualMinimum(int field) 
Trả lại giá trị tối thiểu mà trường này có thể có, đưa ra ngày hiện tại.
8int getGreatestMinimum(int field) 
Trả về giá trị tối thiểu cao nhất cho trường nếu thay đổi.
9Date getGregorianChange() 
Lấy Gregorian Calendar thay đổi.
10int getLeastMaximum(int field) 
Trả về giá trị tối đa thấp nhất cho trường nếu thay đổi.
11int getMaximum(int field) 
Trả về giá trị tối đa cho trường.
12Date getTime()
Lấy thời gian hiện tại của Calendar.
13long getTimeInMillis() 
Lấy thời gian hiện tại của Calendar kiểu long.
14TimeZone getTimeZone()
Lấy múi giờ.
15int getMinimum(int field) 
Trả về giá trị tối thiểu cho trường.
16int hashCode()
Override hashCode.
17boolean isLeapYear(int year)
Xác định xem năm nào là năm nhuận.
18void roll(int field, boolean up) 
Sẽ cộng hoặc trừ (lên / xuống) một đơn vị thời gian trên trường thời gian mà không thay đổi trường lớn hơn
19void set(int field, int value) 
Thiết lập trường thời gian với giá trị nhất định.
20void set(int year, int month, int date)
Thiết lập giá trị cho trường năm, tháng, và ngày.
21void set(int year, int month, int date, int hour, int minute)
Thiết lập giá trị cho trường năm, tháng, ngày, giờ, và phút.
22void set(int year, int month, int date, int hour, int minute, int second) 
Thiết lập giá trị cho trường năm, tháng, ngày, giờ, phút và giây.
23void setGregorianChange(Date date)
Thiết lập ngày GregorianCalendar thay đổi.
24void setTime(Date date) 
Thiết lập thời gian hiện tại của Lịch với ngày nhận được.
25void setTimeInMillis(long millis)
Thiết lập thời gian hiện tại của Lịch từ giá trị dài.
26void setTimeZone(TimeZone value) 
Thiết lập múi giờ với giá trị vùng thời gian nhất định.
27String toString() 
Trả về chuỗi đại diện của lịch này.

Ví dụ:

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");
      }
   }
}

Kết quả hiển thị:

Date: Feb 23 2014
Time: 2:53:6
The current year is not a leap year

Như vậy năm này không phải là năm nhuận.

Nguồn bài viết: DOTNET.VN

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML