Bài tập xử lý ngày tháng trong java năm 2024

Nhưng cách tiếp cận này có nhiều nhược điểm. Lớp

public class Main {
   public static void main(String[] args) {
       Date date1 = new Date();
       Date date2 = new Date();
       System.out.println((date1.getTime() > date2.getTime())?
               "date1 is later than date2" : "date1 is earlier than date2");
   }
}

0được tạo để làm việc với văn bản và có các phương thức thích hợp. Nếu chúng ta cần quản lý ngày bằng cách nào đó (ví dụ: thêm 2 giờ vào đó), thì nó

public class Main {
   public static void main(String[] args) {
       Date date1 = new Date();
       Date date2 = new Date();
       System.out.println((date1.getTime() > date2.getTime())?
               "date1 is later than date2" : "date1 is earlier than date2");
   }
}

0sẽ không hoạt động ở đây. Hoặc, ví dụ: hiển thị ngày giờ hiện tại tại thời điểm chương trình được biên dịch vào bảng điều khiển. Điều đó cũng chẳng giúp ích được gì ở đây

public class Main {
   public static void main(String[] args) {
       Date date1 = new Date();
       Date date2 = new Date();
       System.out.println((date1.getTime() > date2.getTime())?
               "date1 is later than date2" : "date1 is earlier than date2");
   }
}

0: trong khi bạn viết mã và chạy nó, thời gian sẽ thay đổi và những thông tin không liên quan sẽ được hiển thị trong bảng điều khiển. Do đó, trong Java, người tạo ra nó đã cung cấp một số lớp để làm việc với ngày và giờ. Đầu tiên là lớp

public class Main {
   public static void main(String[] args) {
       Date date1 = new Date();
       Date date2 = new Date();
       System.out.println((date1.getTime() > date2.getTime())?
               "date1 is later than date2" : "date1 is earlier than date2");
   }
}

3

Lớp ngày Java

Chúng tôi đặt tên đầy đủ cho nó vì cũng có một lớp trong gói khác trong Java

public class Main {
   public static void main(String[] args) {
       Date date1 = new Date();
       Date date2 = new Date();
       System.out.println((date1.getTime() > date2.getTime())?
               "date1 is later than date2" : "date1 is earlier than date2");
   }
}

4. Đừng nhầm lẫn! Điều đầu tiên bạn cần biết về nó là nó lưu trữ ngày tính bằng mili giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970. Thậm chí còn có một tên riêng cho ngày này - “Unix time”. Một cách khá thú vị, bạn có đồng ý không? :) Điều thứ hai cần nhớ: nếu bạn tạo một đối tượng

public class Main {
   public static void main(String[] args) {
       Date date1 = new Date();
       Date date2 = new Date();
       System.out.println((date1.getTime() > date2.getTime())?
               "date1 is later than date2" : "date1 is earlier than date2");
   }
}

5có hàm tạo trống, kết quả sẽ là ngày giờ hiện tại tại thời điểm đối tượng được tạo .

public class Main {
   public static void main(String[] args) {
       Date date1 = new Date();
       Date date2 = new Date();
       System.out.println((date1.getTime() > date2.getTime())?
               "date1 is later than date2" : "date1 is earlier than date2");
   }
}

0Bạn có nhớ chúng tôi đã viết rằng một tác vụ như vậy sẽ có vấn đề đối với định dạng ngày không? Cả lớp

public class Main {
   public static void main(String[] args) {
       Date date1 = new Date();
       Date date2 = new Date();
       System.out.println((date1.getTime() > date2.getTime())?
               "date1 is later than date2" : "date1 is earlier than date2");
   }
}

5giải quyết nó một cách dễ dàng.

public class Main {
   public static void main(String[] args) {
       Date date = new Date();
       System.out.println(date);
   }
}

Chạy mã này nhiều lần và bạn sẽ thấy thời gian sẽ thay đổi như thế nào mỗi lần :) Điều này có thể thực hiện được chính xác vì nó được lưu trữ tính bằng mili giây: chúng là đơn vị thời gian nhỏ nhất, đó là lý do tại sao kết quả rất chính xác. Có một hàm tạo khác cho

public class Main {
   public static void main(String[] args) {
       Date date1 = new Date();
       Date date2 = new Date();
       System.out.println((date1.getTime() > date2.getTime())?
               "date1 is later than date2" : "date1 is earlier than date2");
   }
}

5: bạn có thể chỉ định chính xác số mili giây đã trôi qua từ 00:00 ngày 1 tháng 1 năm 1970 đến ngày được yêu cầu và nó sẽ được tạo:

public class Main {
   public static void main(String[] args) {
       Date date = new Date(1212121212121L);
       System.out.println(date);
   }
}

Đầu ra của bảng điều khiển:


Fri May 30 08:20:12 MSD 2008

Chúng tôi đã nhận được nó vào ngày 30 tháng 5 năm 2008. “Thứ Sáu” có nghĩa là ngày trong tuần - “Thứ Sáu” (Thứ Sáu) và MSD - “Tiết kiệm ánh sáng ban ngày ở Moscow” (giờ mùa hè ở Moscow). Một phần nghìn giây được truyền ở định dạng

public class Main {
   public static void main(String[] args) {
       Date date1 = new Date();
       Date date2 = new Date();
       System.out.println((date1.getTime() > date2.getTime())?
               "date1 is later than date2" : "date1 is earlier than date2");
   }
}

9, vì số lượng của chúng thường không vừa với


date1 раньше date2

0. Vì vậy, loại hoạt động ngày nào chúng ta có thể cần trong công việc của mình? Tất nhiên, điều rõ ràng nhất là sự so sánh . Xác định xem một ngày muộn hơn hay sớm hơn ngày khác. Điều này có thể được thực hiện theo những cách khác nhau. Ví dụ: bạn có thể gọi phương thức .


date1 раньше date2

1, phương thức này sẽ trả về số mili giây đã trôi qua kể từ nửa đêm ngày 1 tháng 1 năm 1970. Hãy gọi nó trên hai đối tượng Date và so sánh chúng với nhau:

public class Main {
   public static void main(String[] args) {
       Date date1 = new Date();
       Date date2 = new Date();
       System.out.println((date1.getTime() > date2.getTime())?
               "date1 is later than date2" : "date1 is earlier than date2");
   }
}

Phần kết luận:


date1 раньше date2

Nhưng có một cách thuận tiện hơn, đó là sử dụng các phương thức đặc biệt của lớp

public class Main {
   public static void main(String[] args) {
       Date date1 = new Date();
       Date date2 = new Date();
       System.out.println((date1.getTime() > date2.getTime())?
               "date1 is later than date2" : "date1 is earlier than date2");
   }
}

5:


date1 раньше date2

3,


date1 раньше date2

4và


date1 раньше date2

5. Tất cả đều trả về kết quả ở dạng


date1 раньше date2

6. Phương thức này


date1 раньше date2

3kiểm tra xem ngày của chúng ta có sớm hơn ngày chúng ta chuyển làm đối số hay không:

public class Main {
   public static void main(String[] args) throws InterruptedException {
       Date date1 = new Date();
       Thread.sleep(2000);//pause the program for 2 seconds
       Date date2 = new Date();
       System.out.println(date1.before(date2));
   }
}

Đầu ra của bảng điều khiển:


true

Phương thức này hoạt động theo cách tương tự


date1 раньше date2

4; nó kiểm tra xem ngày của chúng ta có muộn hơn ngày chúng ta chuyển làm đối số hay không:

public class Main {
   public static void main(String[] args) throws InterruptedException {
       Date date1 = new Date();
       Thread.sleep(2000);//pause the program for 2 seconds
       Date date2 = new Date();
       System.out.println(date1.after(date2));
   }
}

Bài tập xử lý ngày tháng trong java năm 2024

Đầu ra của bảng điều khiển:


false

Trong ví dụ của chúng tôi, chúng tôi đặt chương trình ở chế độ ngủ trong 2 giây để đảm bảo hai ngày khác nhau. Trên các máy tính nhanh, thời gian giữa việc tạo


date1 раньше date2

9và

public class Main {
   public static void main(String[] args) throws InterruptedException {
       Date date1 = new Date();
       Thread.sleep(2000);//pause the program for 2 seconds
       Date date2 = new Date();
       System.out.println(date1.before(date2));
   }
}

0có thể ít hơn một phần nghìn giây, trong trường hợp đó cả và


date1 раньше date2

3và


date1 раньше date2

4sẽ trả về

public class Main {
   public static void main(String[] args) throws InterruptedException {
       Date date1 = new Date();
       Thread.sleep(2000);//pause the program for 2 seconds
       Date date2 = new Date();
       System.out.println(date1.before(date2));
   }
}

3. Nhưng phương pháp


date1 раньше date2

5trong tình huống như vậy sẽ trở lại

public class Main {
   public static void main(String[] args) throws InterruptedException {
       Date date1 = new Date();
       Thread.sleep(2000);//pause the program for 2 seconds
       Date date2 = new Date();
       System.out.println(date1.before(date2));
   }
}

5! Rốt cuộc, nó so sánh chính xác số mili giây đã trôi qua kể từ 00:00 ngày 1 tháng 1 năm 1970 cho mỗi ngày. Các đối tượng sẽ chỉ được coi là bằng nhau nếu chúng khớp với nhau đến từng mili giây:

public class Main {
   public static void main(String[] args) {
       Date date = new Date();
       System.out.println(date);
   }
}

0

Đây là một cái gì đó khác bạn cần chú ý đến. Nếu bạn mở tài liệu về lớp này

public class Main {
   public static void main(String[] args) {
       Date date1 = new Date();
       Date date2 = new Date();
       System.out.println((date1.getTime() > date2.getTime())?
               "date1 is later than date2" : "date1 is earlier than date2");
   }
}

5trên trang web của Oracle, bạn sẽ thấy nhiều phương thức và hàm tạo của nó đã được chỉ định là

public class Main {
   public static void main(String[] args) throws InterruptedException {
       Date date1 = new Date();
       Thread.sleep(2000);//pause the program for 2 seconds
       Date date2 = new Date();
       System.out.println(date1.before(date2));
   }
}

7(“không được dùng nữa”). Đây, hãy xem: Đây là điều mà chính những người tạo ra Java nói về những phần của lớp đã không còn được dùng nữa: “Phần tử chương trình được chú thích bằng @Deprecated là thứ mà các lập trình viên không khuyến khích sử dụng, thường là vì nó nguy hiểm hoặc vì điều đó có một sự thay thế tốt hơn.” Điều này không có nghĩa là những phương pháp này hoàn toàn không thể được sử dụng. Hơn nữa, nếu bản thân bạn cố gắng chạy mã bằng cách sử dụng chúng trong IDEA, rất có thể nó sẽ hoạt động. Hãy lấy ví dụ về phương thức không được dùng nữa

public class Main {
   public static void main(String[] args) throws InterruptedException {
       Date date1 = new Date();
       Thread.sleep(2000);//pause the program for 2 seconds
       Date date2 = new Date();
       System.out.println(date1.before(date2));
   }
}

8, trả về số giờ từ đối tượng

public class Main {
   public static void main(String[] args) {
       Date date1 = new Date();
       Date date2 = new Date();
       System.out.println((date1.getTime() > date2.getTime())?
               "date1 is later than date2" : "date1 is earlier than date2");
   }
}

5.

public class Main {
   public static void main(String[] args) {
       Date date = new Date();
       System.out.println(date);
   }
}

1

Ví dụ: nếu tại thời điểm bạn chạy mã, thời gian là 14:21, nó sẽ hiển thị số 14. Như bạn có thể thấy, phương thức không dùng nữa sẽ bị gạch bỏ, nhưng nó hoạt động khá tốt. Các phương thức này không bị loại bỏ hoàn toàn để không làm hỏng một loạt mã đã được viết bằng chúng. Nghĩa là, những phương pháp này không bị “hỏng” hoặc “bị loại bỏ”, chúng chỉ đơn giản là không được khuyến khích sử dụng do có sẵn một giải pháp thay thế thuận tiện hơn. Nhân tiện, nó được viết về nó ngay trong tài liệu:

Bài tập xử lý ngày tháng trong java năm 2024
Hầu hết các phương thức của lớp Date đã được chuyển sang phiên bản mở rộng, cải tiến của nó - lớp

true

0. Chúng ta sẽ tìm hiểu anh ấy nhiều hơn :)

Lịch Java

Java 1.1 đã giới thiệu một lớp mới -


true

0. Anh ấy đã làm cho việc xử lý ngày tháng trong Java dễ dàng hơn một chút so với trước đây. Việc triển khai duy nhất của lớp


true

0mà chúng ta sẽ làm việc là lớp


true

3(nó triển khai lịch Gregorian, theo lịch mà hầu hết các quốc gia trên thế giới đều sinh sống). Tiện lợi chính của nó là nó có thể làm việc với ngày tháng ở định dạng thuận tiện hơn. Ví dụ: anh ấy có thể:

  • Thêm tháng hoặc ngày vào ngày hiện tại
  • Kiểm tra xem năm đó có phải là năm nhuận hay không;
  • Nhận các thành phần ngày riêng lẻ (ví dụ: lấy số tháng từ toàn bộ ngày)
  • Ngoài ra, một hệ hằng số rất tiện lợi đã được phát triển bên trong nó (chúng ta sẽ thấy nhiều hằng số trong số đó bên dưới).

Một điểm khác biệt quan trọng khác của lớp


true

0là nó thực hiện một hằng số


true

5: bạn có thể đặt ngày thành thời đại BC (“Trước Chúa Kitô” - trước sự ra đời của Chúa Kitô, tức là “trước thời đại của chúng ta”) hoặc AC (“Sau Chúa Kitô” - “ thời đại của chúng ta"). Hãy xem xét tất cả điều này với các ví dụ. Cùng tạo lịch ngày 25/01/2017:

public class Main {
   public static void main(String[] args) {
       Date date = new Date();
       System.out.println(date);
   }
}

2

Các tháng trong lớp


true

0(nhân

public class Main {
   public static void main(String[] args) {
       Date date1 = new Date();
       Date date2 = new Date();
       System.out.println((date1.getTime() > date2.getTime())?
               "date1 is later than date2" : "date1 is earlier than date2");
   }
}

5tiện, như trong ,) bắt đầu từ 0, vì vậy chúng ta đã chuyển số 0 làm đối số thứ hai. Điều chính khi làm việc với một lớp


true

0là phải hiểu rằng đây là một lịch chứ không phải một ngày riêng biệt.

Bài tập xử lý ngày tháng trong java năm 2024
Ngày chỉ đơn giản là một dãy số biểu thị một khoảng thời gian cụ thể. Và lịch là cả một thiết bị mà bạn có thể thực hiện rất nhiều việc với ngày tháng :) Điều này có thể thấy khá rõ nếu bạn cố gắng xuất đối tượng Lịch ra bàn điều khiển: Đầu ra:
public class Main {
   public static void main(String[] args) {
       Date date = new Date();
       System.out.println(date);
   }
}

3

Hãy xem có bao nhiêu thông tin! Lịch có một loạt thuộc tính mà ngày thông thường không có và tất cả chúng đều được xuất ra bảng điều khiển (đây là cách phương thức


true

9trong lớp hoạt động


true

0). Nếu khi làm việc, bạn chỉ cần lấy một ngày đơn giản trên lịch, tức là. đối tượng

public class Main {
   public static void main(String[] args) {
       Date date1 = new Date();
       Date date2 = new Date();
       System.out.println((date1.getTime() > date2.getTime())?
               "date1 is later than date2" : "date1 is earlier than date2");
   }
}

5- việc này được thực hiện bằng cách sử dụng một phương thức

public class Main {
   public static void main(String[] args) throws InterruptedException {
       Date date1 = new Date();
       Thread.sleep(2000);//pause the program for 2 seconds
       Date date2 = new Date();
       System.out.println(date1.after(date2));
   }
}

2(tên không hợp lý nhất, nhưng không thể làm được gì):

public class Main {
   public static void main(String[] args) {
       Date date = new Date();
       System.out.println(date);
   }
}

4

Phần kết luận:

public class Main {
   public static void main(String[] args) {
       Date date = new Date();
       System.out.println(date);
   }
}

5

Bây giờ chúng ta đã “đơn giản hóa” lịch thành một ngày thông thường. Tiếp tục nào. Ngoài các ký hiệu số trong tháng,


true

0các hằng số có thể được sử dụng trong lớp học. Hằng số là các trường tĩnh của một lớp


true

0có giá trị đã được đặt sẵn và không thể thay đổi. Tùy chọn này thực sự tốt hơn vì nó cải thiện khả năng đọc mã.

public class Main {
   public static void main(String[] args) {
       Date date = new Date();
       System.out.println(date);
   }
}

6

public class Main {
   public static void main(String[] args) throws InterruptedException {
       Date date1 = new Date();
       Thread.sleep(2000);//pause the program for 2 seconds
       Date date2 = new Date();
       System.out.println(date1.after(date2));
   }
}

5- một trong những hằng số để chỉ tháng. Với tùy chọn đặt tên này, sẽ không ai quên, chẳng hạn như số “3” có nghĩa là tháng Tư, chứ không phải tháng thứ ba mà chúng ta quen dùng - tháng Ba. Bạn chỉ cần viết

public class Main {
   public static void main(String[] args) throws InterruptedException {
       Date date1 = new Date();
       Thread.sleep(2000);//pause the program for 2 seconds
       Date date2 = new Date();
       System.out.println(date1.after(date2));
   }
}

6- và thế là xong :) Tất cả các trường lịch (ngày, tháng, phút, giây, v.v.) có thể được đặt riêng lẻ bằng phương thức

public class Main {
   public static void main(String[] args) throws InterruptedException {
       Date date1 = new Date();
       Thread.sleep(2000);//pause the program for 2 seconds
       Date date2 = new Date();
       System.out.println(date1.after(date2));
   }
}

7. Điều này rất thuận tiện vì


true

0mỗi trường có hằng số riêng trong lớp và mã cuối cùng sẽ trông đơn giản nhất có thể. Ví dụ: trong ví dụ trước, chúng tôi đã tạo một ngày nhưng không đặt thời gian hiện tại cho ngày đó. Hãy đặt thời gian là 19:42:12

public class Main {
   public static void main(String[] args) {
       Date date = new Date();
       System.out.println(date);
   }
}

7

Phần kết luận:

public class Main {
   public static void main(String[] args) {
       Date date = new Date();
       System.out.println(date);
   }
}

8

Chúng ta gọi phương thức này

public class Main {
   public static void main(String[] args) throws InterruptedException {
       Date date1 = new Date();
       Thread.sleep(2000);//pause the program for 2 seconds
       Date date2 = new Date();
       System.out.println(date1.after(date2));
   }
}

7, truyền một hằng số cho nó (tùy thuộc vào trường mà chúng ta muốn thay đổi) và một giá trị mới cho trường này. Hóa ra phương thức này

public class Main {
   public static void main(String[] args) throws InterruptedException {
       Date date1 = new Date();
       Thread.sleep(2000);//pause the program for 2 seconds
       Date date2 = new Date();
       System.out.println(date1.after(date2));
   }
}

7là một loại "siêu thiết lập" có thể đặt giá trị không phải cho một trường mà cho nhiều trường :) Việc cộng và trừ các giá trị trong một lớp


true

0được thực hiện bằng cách sử dụng


false

2. Bạn cần chuyển vào đó trường mà bạn muốn thay đổi và số - chính xác là bạn muốn cộng/trừ bao nhiêu từ giá trị hiện tại. Ví dụ: hãy đặt ngày chúng tôi tạo trở lại 2 tháng trước:

public class Main {
   public static void main(String[] args) {
       Date date = new Date();
       System.out.println(date);
   }
}

9

Phần kết luận:

public class Main {
   public static void main(String[] args) {
       Date date = new Date(1212121212121L);
       System.out.println(date);
   }
}

0

Tuyệt vời! Chúng tôi đã ấn định ngày trở lại 2 tháng trước. Kết quả là, không chỉ tháng mà cả năm cũng đã thay đổi, từ 2017 sang 2016. Tất nhiên, việc tính toán năm hiện tại khi chuyển ngày được thực hiện tự động và không cần phải điều khiển thủ công. Nhưng nếu vì mục đích nào đó bạn cần vô hiệu hóa hành vi này, bạn có thể làm điều đó. Một phương thức đặc biệt


false

3có thể cộng và trừ các giá trị mà không ảnh hưởng đến các giá trị khác. Ví dụ như thế này:

public class Main {
   public static void main(String[] args) {
       Date date = new Date(1212121212121L);
       System.out.println(date);
   }
}

1

Chúng tôi đã làm chính xác như trong ví dụ trước - chúng tôi đã trừ đi 2 tháng kể từ ngày hiện tại. Nhưng bây giờ mã đã hoạt động khác: tháng thay đổi từ tháng 1 sang tháng 11, nhưng năm vẫn giữ nguyên như năm 2017! Phần kết luận:

public class Main {
   public static void main(String[] args) {
       Date date = new Date(1212121212121L);
       System.out.println(date);
   }
}

2

Hơn nữa. Như chúng tôi đã nói ở trên, tất cả các trường của một đối tượng


true

0có thể được lấy riêng biệt. Phương pháp này chịu trách nhiệm cho việc này


false

5:

public class Main {
   public static void main(String[] args) {
       Date date = new Date(1212121212121L);
       System.out.println(date);
   }
}

3

Phần kết luận:

public class Main {
   public static void main(String[] args) {
       Date date = new Date(1212121212121L);
       System.out.println(date);
   }
}

4

Tức là, ngoài “super-setter” trong lớp


true

0còn có một “super-getter” :) Một điểm thú vị khác tất nhiên là làm việc với các thời đại. Để tạo ngày “BC”, bạn cần sử dụng trường


true

5 Ví dụ: hãy tạo một ngày biểu thị Trận chiến Cannae, trong đó Hannibal đã đánh bại quân đội La Mã. Điều này xảy ra vào ngày 2 tháng 8 năm 216 trước Công nguyên. e.:

public class Main {
   public static void main(String[] args) {
       Date date = new Date(1212121212121L);
       System.out.println(date);
   }
}

5

Ở đây, chúng tôi đã sử dụng lớp


false

8để hiển thị ngày ở định dạng mà chúng tôi dễ hiểu hơn (các chữ cái “GG” chịu trách nhiệm hiển thị thời đại). Phần kết luận:

public class Main {
   public static void main(String[] args) {
       Date date = new Date(1212121212121L);
       System.out.println(date);
   }
}

6


true

0Còn có nhiều phương thức và hằng số khác trong lớp , hãy đọc về chúng trong tài liệu:

  • Lịch lớp

Dòng mới cho đến ngày

Để chuyển đổi Chuỗi thành Ngày, bạn có thể sử dụng lớp trợ giúp Java - SimpleDateFormat . Đây là lớp bạn cần để chuyển đổi ngày sang định dạng do bạn xác định.

Bài tập xử lý ngày tháng trong java năm 2024
Đổi lại, nó rất giống với DateFormat . Sự khác biệt đáng chú ý duy nhất giữa hai loại này là SimpleDateFormat có thể được sử dụng để định dạng (chuyển đổi ngày thành chuỗi) và phân tích chuỗi thành ngày nhận biết ngôn ngữ, trong khi DateFormat không hỗ trợ ngôn ngữ. Ngoài ra, DateFormat là một lớp trừu tượng cung cấp hỗ trợ cơ bản cho việc định dạng và phân tích ngày tháng, trong khi SimpleDateFormat là một lớp cụ thể mở rộng lớp DateFormat. Đây là ví dụ về việc tạo đối tượng SimpleDateFormat và định dạng Ngày:
public class Main {
   public static void main(String[] args) {
       Date date = new Date(1212121212121L);
       System.out.println(date);
   }
}

7

Trong ví dụ trên, chúng tôi đã sử dụng mẫu "yyyy-MM-dd HH:mm:ss" có nghĩa là:

  • 4 chữ số cho năm (yyyy);
  • 2 chữ số cho tháng (MM);
  • 2 chữ số cho ngày (dd);
  • 2 chữ số giờ ở định dạng 24 giờ (HH);
  • 2 chữ số cho phút (mm);
  • 2 chữ số cho giây (ss).

Các dấu phân tách và thứ tự của các ký hiệu mẫu được giữ nguyên. Đầu ra của bảng điều khiển:

public class Main {
   public static void main(String[] args) {
       Date date = new Date(1212121212121L);
       System.out.println(date);
   }
}

8

Có khá nhiều mẫu chữ cho lớp SimpleDateFormat . Để bạn không bị nhầm lẫn, chúng tôi đã tập hợp chúng thành một bảng:

Biểu tượng Sự miêu tả Ví dụ G thời đại (theo bản địa hóa tiếng Anh - AD và BC) QUẢNG CÁO y năm (số có 4 chữ số) 2020 ừ năm (2 chữ số cuối) 20 yyyy năm (số có 4 chữ số) 2020 M số tháng (không có số 0 đứng đầu) số 8 MM số tháng (có số 0 đứng đầu nếu số tháng < 10) 04 MMM viết tắt tháng ba chữ cái (theo bản địa hóa) Tháng một MMMM tên tháng đầy đủ Tháng sáu w tuần trong năm (không có số 0 đứng đầu) 4 ôi tuần trong năm (có số 0 đứng đầu) 04 W tuần trong tháng (không có số 0 đứng đầu) 3 thế giới tuần trong tháng (có số 0 đứng đầu) 03 D ngày trong năm 67 d ngày trong tháng (không có số 0 đứng đầu) 9 đ ngày trong tháng (có số 0 đứng đầu) 09 F ngày trong tuần trong tháng (không có số 0 đứng đầu) 9 FF ngày trong tuần trong tháng (có số 0 đứng đầu) 09 E ngày trong tuần (viết tắt) W EEEE ngày trong tuần (đầy đủ) Thứ sáu bạn số ngày trong tuần (không có số 0 đứng đầu) 5 ừ số ngày trong tuần (có số 0 đứng đầu) 05 Một Điểm đánh dấu AM/PM LÀ. H giờ ở định dạng 24 giờ không có số 0 đứng đầu 6 HH đồng hồ ở định dạng 24 giờ với số 0 đứng đầu 06 k số giờ ở định dạng 24 giờ 18 K số giờ ở định dạng 12 giờ 6 h thời gian ở định dạng 12 giờ không có số 0 đứng đầu 6 hh thời gian ở định dạng 12 giờ với số 0 đứng đầu 06 tôi phút không có số 0 đứng đầu 32 mm phút có số 0 đứng đầu 32 S giây không có số 0 đứng đầu mười một ss giây có số 0 đứng đầu mười một S mili giây 297 z Múi giờ EET Z múi giờ ở định dạng RFC 822 300

Ví dụ về sự kết hợp ký tự mẫu:

Vật mẫu Ví dụ dd-MM-yyyy 01-11-2020 yyyy-MM-dd 2019-10-01 HH:mm:ss.SSS 23:59.59.999 yyyy-MM-dd HH:mm:ss 2018-11-30 03:09:02 yyyy-MM-dd HH:mm:ss.SSS 2016-03-01 01:20:47.999 yyyy-MM-dd HH:mm:ss.SSS Z 2013-13-13 23:59:59.999 +0100

Nếu bạn mắc một lỗi nhỏ với định dạng, bạn có thể trở thành chủ sở hữu của java.text.ParseException và đây không phải là một thành tích đặc biệt dễ chịu. Chà, chuyến tham quan ngắn vào SimpleDateFormat đã kết thúc - hãy quay lại bản dịch chuỗi java thành date . SimpleDateFormat cung cấp cho chúng tôi những khả năng như vậy và chúng tôi sẽ thực hiện từng bước quy trình này.

  1. Tạo một dòng mà bạn cần đặt ngày:

    public class Main { public static void main(String[] args) {

       Date date = new Date(1212121212121L);  
       System.out.println(date);  
    
    } }

    9
  2. Chúng tôi tạo một đối tượng SimpleDateFormat mới với mẫu khớp với những gì chúng tôi có trong chuỗi (nếu không chúng tôi sẽ không thể phân tích cú pháp nó):

    Fri May 30 08:20:12 MSD 2008

    0 Như bạn có thể thấy, chúng ta có đối số Locale ở đây. Nếu chúng ta bỏ qua nó, nó sẽ sử dụng Ngôn ngữ mặc định, không phải lúc nào cũng là tiếng Anh. Nếu ngôn ngữ không khớp với chuỗi đầu vào thì dữ liệu chuỗi liên kết với ngôn ngữ, như Mon hoặc April của chúng tôi , sẽ không được nhận dạng và sẽ tạo ra ngoại lệ java.text.ParseException, ngay cả khi mẫu khớp. Tuy nhiên, chúng tôi không phải chỉ định định dạng nếu chúng tôi đang sử dụng mẫu không dành riêng cho ngôn ngữ. Ví dụ - yyyy-MM-dd HH:mm:ss
  3. Chúng tôi tạo một ngày bằng cách sử dụng một trình định dạng, từ đó phân tích nó từ chuỗi đầu vào:

    Fri May 30 08:20:12 MSD 2008

    1 Đầu ra của bảng điều khiển:

    Fri May 30 08:20:12 MSD 2008

    2 Hmmm... Nhưng định dạng không còn giống nhau nữa! Để tạo định dạng tương tự, chúng tôi sử dụng lại trình định dạng:

    Fri May 30 08:20:12 MSD 2008

    3 Đầu ra của bảng điều khiển:

    Fri May 30 08:20:12 MSD 2008

    4

SimpleDateFormat và Lịch

SimpleDateFormat cho phép bạn định dạng tất cả các đối tượng Ngày và Lịch mà bạn tạo để sử dụng sau này. Hãy xem xét một điểm thú vị khi làm việc với các thời đại. Để tạo ngày "BC", bạn cần sử dụng trường Calendar.Era. Ví dụ: hãy tạo một ngày biểu thị Trận chiến Cannae, trong đó Hannibal đã đánh bại quân đội Rome. Điều này xảy ra vào ngày 2 tháng 8 năm 216 trước Công nguyên. e.:

public class Main {
   public static void main(String[] args) {
       Date date = new Date(1212121212121L);
       System.out.println(date);
   }
}

5

Ở đây, chúng tôi đã sử dụng lớp SimpleDateFormat để hiển thị ngày ở định dạng mà chúng tôi dễ hiểu hơn (như đã nêu ở trên, các chữ cái “GG” chịu trách nhiệm hiển thị thời đại). Phần kết luận:

public class Main {
   public static void main(String[] args) {
       Date date = new Date(1212121212121L);
       System.out.println(date);
   }
}

6

Định dạng ngày Java

Đây là một trường hợp khác. Giả sử rằng định dạng ngày này không phù hợp với chúng tôi:

public class Main {
   public static void main(String[] args) {
       Date date = new Date(1212121212121L);
       System.out.println(date);
   }
}

2

Vì vậy, nó ở đây. Bằng cách sử dụng các khả năng của chúng tôi ở định dạng ngày java, bạn có thể thay đổi nó thành định dạng ngày của riêng bạn mà không gặp nhiều khó khăn: