Thứ Năm, 16 tháng 8, 2018

Java - Ngày và giờ

lập trình java

Lập trình Java cung cấp lớp Date có sẵn trong gói java.util , lớp này đóng gói ngày và giờ hiện tại.

Lớp Date hỗ trợ hai hàm tạo như được hiển thị trong bảng sau.

Sr.No.Constructor & Mô tả
1Ngày( )

Hàm khởi tạo này khởi tạo đối tượng với ngày tháng và thời gian hiện tại.
2Ngày (dài millisec)

Nhà xây dựng này chấp nhận một đối số bằng số mili giây đã trôi qua kể từ nửa đêm, ngày 1 tháng 1 năm 1970.
Sau đây là các phương pháp của lớp ngày tháng.

Sr.No.Phương thức & Mô tả
1boolean after (Ngày tháng)

Trả về true nếu đối tượng Date được gọi có chứa một ngày trễ hơn ngày được chỉ định theo ngày, ngược lại, nó trả về false.
2boolean before (Ngày tháng)

Trả về true nếu đối tượng Date được gọi có chứa một ngày sớm hơn ngày được chỉ định theo ngày, ngược lại, nó trả về false.
3Đối tượng nhân bản ()

Nhân đôi đối tượng Date gọi.
4int compareTo (Ngày tháng)

So sánh giá trị của đối tượng gọi với giá trị ngày tháng. Trả về 0 nếu các giá trị bằng nhau. Trả về giá trị âm nếu đối tượng gọi sớm hơn ngày tháng. Trả về giá trị dương nếu đối tượng gọi sau ngày tháng.
5int compareTo (Object obj)

Hoạt động giống hệt với compareTo (Date) nếu obj thuộc lớp Date. Nếu không, nó sẽ ném ra một ClassCastException.
6boolean bằng (Ngày đối tượng)

Trả về true nếu đối tượng Date được gọi có chứa cùng thời gian và ngày tháng được chỉ định theo ngày tháng, ngược lại, nó trả về false.
7
getTime dài ()

Trả về số mili giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970.
số 8int hashCode ()

Trả về mã băm cho đối tượng gọi.
9void setTime (thời gian dài)

Đặt thời gian và ngày theo thời gian được chỉ định, biểu thị thời gian trôi qua tính bằng mili giây từ nửa đêm, ngày 1 tháng 1 năm 1970.
10Chuỗi toString ()

Chuyển đổi đối tượng Date invoking thành một chuỗi và trả về kết quả.

Lấy ngày và giờ hiện tại

Đây là một phương pháp rất dễ dàng để có được ngày và giờ hiện tại trong Java. Bạn có thể sử dụng một đối tượng Date đơn giản với phương thức toString () để in ngày giờ hiện tại như sau:

Thí 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.println(date.toString());
   }
}

Điều này sẽ tạo ra kết quả sau 

Đầu ra

on May 04 09:51:52 CDT 2009

So sánh ngày tháng

Sau đây là ba cách để so sánh hai ngày

Bạn có thể sử dụng getTime () để lấy số mili giây đã trôi qua kể từ nửa đêm, ngày 1 tháng 1 năm 1970, cho cả hai đối tượng và sau đó so sánh hai giá trị này.

Bạn có thể sử dụng các phương thức before (), after () và equals (). Bởi vì ngày 12 của tháng đến trước ngày 18, ví dụ, ngày mới (99, 2, 12) .trước khi (ngày mới (99, 2, 18)) trả về true.

Bạn có thể sử dụng phương thức compareTo (), được định nghĩa bởi giao diện Comparable và được thực hiện bởi Date.

Định dạng ngày bằng SimpleDateFormat

SimpleDateFormat là một lớp cụ thể để định dạng và phân tích các ngày theo cách nhạy cảm theo miền địa phương. SimpleDateFormat cho phép bạn bắt đầu bằng cách chọn bất kỳ mẫu do người dùng xác định cho định dạng ngày giờ.

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

Điều này sẽ tạo ra kết quả sau

Đầu ra

Current Date: Sun 2004.07.18 at 04:14:09 PM PDT

Mã định dạng DateFormat đơn giản

Để chỉ định định dạng thời gian, hãy sử dụng chuỗi mẫu thời gian. Trong mẫu này, tất cả các chữ cái ASCII được dành riêng làm mẫu chữ cái, được định nghĩa như sau:

Tính cáchSự miêu tảThí dụ
GEra designatorAD
yNăm bằng bốn chữ số2001
MTháng trong nămTháng 7 hoặc 07
dNgày trong tháng10
hGiờ trong giờ sáng / chiều (1 ~ 12)12
HGiờ trong ngày (0 ~ 23)22
mPhút trong giờ30
SThứ hai tính bằng phút55
SMili giây234
ENgày trong tuầnThứ ba
DNgày trong năm360
FNgày trong tuần trong tháng2 (thứ hai thứ tư trong tháng bảy)
wTuần trong năm40
WTuần trong tháng1
mộtĐiểm đánh dấu AM / PMPM
kGiờ trong ngày (1 ~ 24)24
KGiờ trong giờ sáng / tối (0 ~ 11)10
zMúi giờgiờ chuẩn phương Đông
'Escape cho văn bảnDấu phân tách
"Trích dẫn một lần`

Định dạng ngày bằng printf

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

Thí 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
      String str = String.format("Current Date/Time : %tc", date );

      System.out.printf(str);
   }
}
Điều này sẽ tạo ra kết quả sau

Đầu ra

Current Date/Time : Sat Dec 15 16:37:57 MST 2012

Sẽ hơi ngớ ngẩn nếu bạn phải cung cấp ngày nhiều lần để định dạng từng phần. Vì lý do đó, một chuỗi định dạng có thể cho biết chỉ mục của đối số được định dạng.

Chỉ số phải ngay lập tức theo% và nó phải được chấm dứt bởi $.

Thí 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
      System.out.printf("%1$s %2$tB %2$td, %2$tY", "Due date:", date);
   }
}
Điều này sẽ tạo ra kết quả sau

Đầu ra
Due date: February 09, 2004

Ngoài ra, bạn có thể sử dụng <flag. Nó chỉ ra rằng cùng một đối số như trong đặc tả định dạng trước đó nên được sử dụng lại.

Thí 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);
   }
}
Điều này sẽ tạo ra kết quả sau

Đầu ra

Due date: February 09, 2004
Ký tự chuyển đổi ngày và giờ
Tính cáchSự miêu tảThí dụ
cHoàn thành ngày giờThứ Hai, ngày 4 tháng 5, 09:51:52 CDT 2009
FNgày ISO 86012004-02-09
DNgày được định dạng của Hoa Kỳ (tháng / ngày / năm)02/09/2004
T24 giờ18:05:19
r12 giờ06:05:19 chiều
RThời gian 24 giờ, không có giây18:05
YNăm bốn chữ số (với số 0 đứng đầu)2004
yHai số cuối của năm (với số 0 đứng đầu)04
CHai chữ số đầu tiên của năm (có số 0 đứng đầu)20
BTên tháng đầy đủTháng hai
bTên tháng viết tắtTháng hai
mTháng hai chữ số (có số 0 đứng đầu)02
dNgày hai chữ số (có số 0 đứng đầu)03
eNgày hai chữ số (không có số 0 đứng đầu)9
ATên đầy đủ ngày trong tuầnThứ hai
mộtTên ngày trong tuần viết tắtThứ Hai
jNgày có ba chữ số trong năm (với số 0 đứng đầu)069
HGiờ hai chữ số (có số 0 đứng đầu), trong khoảng từ 00 đến 2318
kGiờ hai chữ số (không có số 0 đứng đầu), trong khoảng từ 0 đến 2318
tôiGiờ hai chữ số (có số 0 đứng đầu), trong khoảng từ 1 đến 1206
lGiờ hai chữ số (không có số 0 đứng đầu), từ 1 đến 126
MSố phút hai chữ số (có số 0 đứng đầu)05
SSố giây hai chữ số (với số 0 đứng đầu)19
LBa phần nghìn giây (với số 0 đứng đầu)047
NChín nano giây (với số 0 đứng đầu)047000000
PChữ viết sáng hoặc chiềuPM
pChữ thường sáng hoặc chiềuPM
zRFC 822 bù đắp số từ GMT-0800
ZMúi giờPST
SSố giây từ 1970-01-01 00:00:00 GMT1078884319
QMili giây kể từ 1970-01-01 00:00:00 GMT1078884319047
Có các lớp hữu ích khác liên quan đến Ngày và giờ. Để biết thêm chi tiết, bạn có thể tham khảo tài liệu Java Standard.

Phân tích chuỗi thành ngày

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

Thí 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); 
      }
   }
}
Một chạy mẫu của chương trình trên sẽ tạo ra kết quả sau:

Đầu ra

1818-11-11 Parses as Wed Nov 11 00:00:00 EST 1818

Ngủ trong một thời gian

Bạn có thể ngủ trong bất kỳ khoảng thời gian nào từ một phần nghìn giây đến thời gian tồn tại của máy tính. Ví dụ, chương trình sau đây sẽ ngủ trong 3 giây -
Thí dụ
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!"); 
      }
   }
}
Điều này sẽ tạo ra kết quả sau

Đầu ra
Sun May 03 18:04:41 GMT 2009
Sun May 03 18:04:51 GMT 2009

Đo thời gian trôi qua

Đôi khi, bạn có thể cần phải đo thời gian tính bằng mili giây. Vì vậy, hãy viết lại ví dụ trên một lần nữa

Thí dụ
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!");
      }
   }
}
Điều này sẽ tạo ra kết quả sau

Đầu ra
Sun May 03 18:16:51 GMT 2009
Sun May 03 18:16:57 GMT 2009
Difference is : 5993

Lớp GregorianCalendar

GregorianCalendar là một triển khai cụ thể của một lớp Lịch thực hiện lịch Gregorian bình thường mà bạn quen thuộc. Chúng tôi đã không thảo luận về lớp Lịch trong hướng dẫn này, bạn có thể tra cứu tài liệu Java chuẩn cho việc này.

Phương thức getInstance () của Lịch trả về một GregorianCalendar được khởi tạo với ngày và giờ hiện tại theo ngôn ngữ và múi giờ mặc định. GregorianCalendar định nghĩa hai trường: AD và BC. Chúng đại diện cho hai thời đại được định nghĩa bởi lịch Gregorian.

Ngoài ra còn có một số hàm tạo cho các đối tượng GregorianCalendar

Sr.No.Constructor & Mô tả
1GregorianCalendar ()

Xây dựng một GregorianCalendar mặc định bằng cách sử dụng thời gian hiện tại trong múi giờ mặc định với ngôn ngữ mặc định.
2GregorianCalendar (int năm, int tháng, int ngày)

Xây dựng một GregorianCalendar với ngày đã cho được đặt trong múi giờ mặc định với ngôn ngữ mặc định.
3GregorianCalendar (int năm, int tháng, int ngày, int giờ, int phút)

Xây dựng một GregorianCalendar với ngày và giờ đã đặt cho múi giờ mặc định với ngôn ngữ mặc định.
4GregorianCalendar (int năm, int tháng, int ngày, int giờ, int phút, int thứ hai)

Xây dựng một GregorianCalendar với ngày và giờ đã đặt cho múi giờ mặc định với ngôn ngữ mặc định.
5GregorianCalendar (Locale aLocale)

Xây dựng một 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 đã cho.
6GregorianCalendar (múi giờ Zonezone)

Xây dựng một GregorianCalendar dựa trên thời gian hiện tại trong múi giờ nhất định với ngôn ngữ mặc định.
7GregorianCalendar (múi giờ Zone, Locale aLocale)

Xây dựng một GregorianCalendar dựa trên thời gian hiện tại trong múi giờ đã cho với miền địa phương đã cho.
Dưới đây là danh sách một số phương thức hỗ trợ hữu ích được cung cấp bởi lớp GregorianCalendar

Sr.No.Phương thức & Mô tả
1void add (int trường, int số tiền)

Thêm khoảng thời gian được chỉ định (đã ký) vào trường thời gian đã cho, dựa trên các quy tắc của lịch.
2bảo vệ void computeFields ()

Chuyển đổi UTC thành mili giây thành giá trị trường thời gian.
3bảo vệ void computeTime ()

Ghi đè lịch Chuyển đổi giá trị trường thời gian thành UTC dưới dạng mili giây.
4boolean bằng (Object obj)

So sánh GregorianCalendar này với tham chiếu đối tượng.
5int get (int field)

Lấy giá trị cho một trường thời gian cụ thể.
6int getActualMaximum (int field)

Trả về giá trị lớn nhất mà trường này có thể có, cho ngày hiện tại.
7int getActualMinimum (int field)

Trả về giá trị nhỏ nhất mà trường này có thể có, cho ngày hiện tại.
số 8int getGreatestMinimum (int field)

Trả về giá trị tối thiểu cao nhất cho trường đã cho nếu thay đổi.
9Ngày getGregorianChange ()

Lấy ngày thay đổi Lịch Gregorian.
10int getLeastMaximum (int field)

Trả về giá trị tối đa thấp nhất cho trường đã cho nếu thay đổi.
11int getMaximum (int field)

Trả về giá trị lớn nhất cho trường đã cho.
12Ngày getTime ()

Nhận thời gian hiện tại của Lịch này.
13dài getTimeInMillis ()

Nhận thời gian hiện tại của Lịch này trong một thời gian dài.
14TimeZone getTimeZone ()

Lấy múi giờ.
15int getMinimum (int field)

Trả về giá trị nhỏ nhất cho trường đã cho.
16int hashCode ()

Ghi đè hashCode.
17boolean isLeapYear (năm int)

Xác định nếu năm đã cho là năm nhuận.
18void cuộn (int trường, boolean lên)

Thêm hoặc trừ (lên / xuống) một đơn vị thời gian trên trường thời gian đã cho mà không thay đổi các trường lớn hơn.
19bộ trống (trường int, giá trị int)

Đặt trường thời gian bằng giá trị đã cho.
20bộ void (int năm, int tháng, int ngày)

Đặt giá trị cho các trường năm, tháng và ngày.
21void set (int năm, int tháng, int ngày, int giờ, int phút)

Đặt giá trị cho các trường năm, tháng, ngày, giờ và phút.
22void set (int năm, int tháng, int ngày, int giờ, int phút, int thứ hai)

Đặt giá trị cho các trường năm, tháng, ngày, giờ, phút và giây.
23void setGregorianChange (Ngày tháng)

Đặt ngày thay đổi GregorianCalendar.
24void setTime (Ngày tháng)

Đặt thời gian hiện tại của Lịch này với Ngày đã cho.
25void setTimeInMillis (dài millis)

Đặt thời gian hiện tại của Lịch này từ giá trị dài nhất định.
26void setTimeZone (giá trị TimeZone)

Đặt múi giờ với giá trị múi giờ đã cho.
27Chuỗi toString ()

Trả về biểu diễn chuỗi của lịch này.

Thí 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");
      }
   }
}
Điều này sẽ tạo ra kết quả sau

Đầu ra

Date: Apr 22 2009
Time: 11:25:27
The current year is not a leap year
Để có danh sách đầy đủ các hằng số có sẵn trong lớp Lịch, bạn có thể tham khảo tài liệu Java chuẩn.

Không có nhận xét nào:

Đăng nhận xét

Lập trình Java - Ngoại lệ

Một ngoại lệ (hoặc sự kiện đặc biệt) là một vấn đề phát sinh trong quá trình thực hiện chương trình. Khi xảy ra Ngoại lệ , luồng bình thường...