[YIL] 2022: Integer “outdated”?

Có thể bạn đã biết, kiểu dữ liệu Integer có độ dài 32 bit và sẽ có giá trị từ -2,147,483,648 đến +2,147,483,647. Thoạt nhìn thì thấy độ lớn tới hàng tỉ có mà thoải mái dùng, nhưng nếu dùng vào trường hợp sau đây thì Integer sẽ là chưa đủ.

Đó là việc lưu dữ liệu thời gian theo định dạng số.

Nếu lưu chính xác đến đơn vị phút thì định dạng sẽ là: yyMMddHHmm (Java).

Ví dụ 1: 23h59 ngày 31 tháng 12 năm 2021 sẽ được chuyển thành: 2112312359

Ví dụ 2: 0h00 ngày 1 tháng 1 năm 2022 sẽ được chuyển thành: 2201010000

Có thể thấy nếu dùng kiểu dữ liệu Integer để lưu giá trị thời gian trên thì khi đồng hồ chuyển sang năm 2022 thì sẽ không chuyển được dữ liệu thời gian sang dạng số:

2112312359 < 2147483647 (Max Integer) < 2201010000

Đồng nghĩa rằng đoạn code dưới đây sẽ throw exception

SimpleDateFormat sdf = new SimpleDateFormat("yyMMddHHmm");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Integer.valueOf(sdf.format(new Date(1640995200000)));
//java.lang.NumberFormatException: For input string: "2201010000"

Để giải quyết vấn đề thì thay vì dùng Integer ta sẽ dùng Long là xong.