2012-01-04 41 views
7

Tôi cần đếm ngược 90 ngày, 120 ngày và 160 ngày đối với một số mặt hàng. Làm thế nào tôi sẽ mã này? Tôi tiếp tục tìm mã java nhưng điều đó sẽ trả về lỗi khi tôi đang phát triển cho Android.Cách trừ x số ngày từ ngày sang ngày

Tôi cần phải thực hiện ngày và trừ số ngày x và kết quả hiển thị trên màn hình không có gì khác. Cảm ơn

+2

Bạn có thể cụ thể hơn về các lỗi và mã đã tạo ra chúng không? – ObscureRobot

+0

có thể trùng lặp của [Làm thế nào để trừ X ngày kể từ ngày sử dụng lịch Java?] (Http://stackoverflow.com/questions/212321/how-to-subtract-x-days-from-a-date-using-java -calendar) –

Trả lời

18

Bạn nên sử dụng lớp Calendar:

//Calendar set to the current date 
Calendar calendar=Calendar.getInstance(); 
//rollback 90 days 
calendar.add(Calendar.DAY_OF_YEAR, -90); 
//now the date is 90 days back 
Log.i("MyApp","90 days ago:"+calendar.getTime().toString()); 
+0

roll() được thêm vào các trường, chứ không phải trừ đi. Nhưng nó không chính xác, bởi vì nó không thay đổi các lĩnh vực lớn hơn. Xem http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html – nagylzs

+0

bạn nói đúng. cảm ơn bạn. sẽ cập nhật câu trả lời của tôi –

7

Sử dụng các đối tượng Lịch ...

Calendar calendar = Calendar.getInstance(); 
calendar.add(Calendar.DATE, -90); //etc 
0

tl; dr

LocalDate.now(ZoneId.of("America/Montreal")) 
     .minusDays(90) 

java.time

câu trả lời khác ở đây là lỗi thời. Cách hiện đại là với các lớp java.time.

LocalDate

Lớp LocalDate đại diện cho một giá trị ngày tháng chỉ mà không cần thời gian của ngày và không có múi giờ.

Múi giờ rất quan trọng trong việc xác định ngày. Đối với bất kỳ thời điểm cụ thể nào, ngày thay đổi trên toàn cầu theo múi giờ. Ví dụ: một vài phút sau nửa đêm ở Paris France là một ngày mới trong khi vẫn “ngày hôm qua” trong Montréal Québec.

ZoneId z = ZoneId.of("America/Montreal") ; 
LocalDate today = LocalDate.now(z) ; 

Sau đó bạn có thể cộng hoặc trừ ngày.

LocalDate ago090 = today.minusDays(90) ; 
LocalDate ago120 = today.minusDays(120) ; 
LocalDate ago160 = today.minusDays(160) ; 

Để tạo chuỗi ở định dạng chuẩn ISO 8601 của YYYY-MM-DD, hãy gọi toString. Đối với các định dạng khác, tìm kiếm Stack Overflow cho lớp học DateTimeFormatter để xem nhiều ví dụ và thảo luận.

String output = ago120.toString() ; 

Về java.time

Khung java.time được xây dựng vào Java 8 và sau đó. Các lớp này thay thế các lớp học ngày giờ legacy phiền hà cũ như java.util.Date, Calendar, & SimpleDateFormat.

Dự án Joda-Time, hiện đang ở maintenance mode, khuyên di chuyển sang java.time.

Để tìm hiểu thêm, hãy xem Oracle Tutorial. Và tìm kiếm Stack Overflow cho nhiều ví dụ và giải thích. Đặc điểm kỹ thuật là JSR 310.

Nơi lấy các lớp java.time?

  • Java SE 8SE 9 và sau
    • Built-in.
    • Một phần của API Java chuẩn với gói được triển khai.
    • Java 9 thêm một số tính năng và bản sửa lỗi nhỏ.
  • Java SE 6SE 7
    • Hầu hết các chức năng java.time được back-chuyển đến Java 6 & 7 trong ThreeTen-Backport.
  • Android

Dự án mở rộng ThreeTen-Extra java.time với các lớp bổ sung. Dự án này là một nền tảng chứng minh cho những bổ sung có thể có trong tương lai vào java.time. Bạn có thể tìm thấy một số lớp học hữu ích tại đây như Interval, YearWeek, YearQuartermore.

Các vấn đề liên quan