Cách lấy số tuần cụ thể từ một ngày trong Java

Trong bài viết này, chúng ta sẽ nghiên cứu một cách để lấy số tuần từ một ngày nhất định trong Java. Nếu các bạn đang sử dụng Java phiên bản thấp hơn Java 8 thì cũng đừng lo, bài viết vẫn sẽ cung cấp cách xử lý cho các phiên bản thấp hơn Java 8.

Bên cạnh đó điểm chính là chúng ta sẽ sử dụng Java 8 với các Date API mới được cung cấp cho phép chúng ta thao tác nhanh gọn hơn.

Trước Java 8

Trước Java 8, các thao tác trên các dữ liệu ngày và giờ được thực hiện chủ yếu bằng cách sử dụng các class Date và Calendar.Thông thường chúng ta sẽ tạo ra một Calendar object và sau đó trích xuất các dữ  liệu cần thiết từ đây thông qua các hàm được xây dựng sẵn.

import java.util.Calendar;

public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(2021, 2, 4);
        int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);
        System.out.println("Week: " + weekOfYear);
    }
}

Output: Week: 10

Chúng tôi cần phải cẩn thận khi áp dụng phương pháp này, vì thuộc tính tháng trong Calendar được tính từ 0. Điều này có nghĩa là nếu chúng ta muốn xác định tháng 3, thì chúng ta cần sử dụng số 2, điều này thường có thể dẫn đến nhầm lẫn.

Chúng ta chỉ cần tạo một Calendar instance cho Locale cụ thể cùng với ngày, tháng, năm được chỉ định. Sau đó sử dụng WEEK_OF_YEAR để lấy số tuần hiện tại từ Calendar instance.

Java 8 trở đi

Từ Java 8 trở đi, chúng ta có một số Date &  Time API mới thay thế cho Calendar và Date cũ.

import java.time.LocalDate;
import java.time.temporal.WeekFields;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        LocalDate localDate = LocalDate.of(2021, 3, 4);
        int weekOfYear = localDate.get(WeekFields.of(Locale.getDefault()).weekOfYear());
        System.out.println(weekOfYear);
    }
}

Output: 10

Nguồn

https://www.baeldung.com/java-get-week-number

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x