2012-02-09 54 views
5

tôi có mã này rất đơn giản:Joda Thời phút trong một thời gian hoặc khoảng

DateTime date = new DateTime(dateValue); 
DateTime currentDate = new DateTime(System.currentTimeMillis()); 

System.out.println("date: " + date.toString()); 
System.out.println("currentDate: " + currentDate.toString()); 

Period period = new Period(currentDate, date); 
System.out.println("PERIOD MINUTES: " + period.getMinutes()); 
System.out.println("PERIOD DAYS: " + period.getDays()); 

Duration duration = new Duration(currentDate, date); 
System.out.println("DURATION MINUTES: " + duration.getStandardMinutes()); 
System.out.println("DURATION DAYS: " + duration.getStandardDays()); 

Tôi đang cố gắng để đơn giản là tìm ra số ngày và phút giữa hai ngày ngẫu nhiên.

Đây là đầu ra cho đoạn mã này:

date: 2012-02-09T00:00:00.000+02:00 
currentDate: 2012-02-09T18:15:40.739+02:00 
PERIOD MINUTES: -15 
PERIOD DAYS: 0 
DURATION MINUTES: -1095 
DURATION DAYS: 0 

Tôi đoán rằng tôi đang làm điều gì sai, tôi chỉ không thể nhìn thấy gì.

Trả lời

13

Vấn đề là bạn không xác định kiểu thời gian trong nhà xây dựng giai đoạn - do đó, nó sử dụng mặc định "năm, tháng, tuần, ngày, giờ, phút, giây và millis". Bạn chỉ thấy 15 phút vì bạn không yêu cầu hàng giờ, điều này sẽ trả về -18.

Nếu bạn chỉ muốn ngày và phút, bạn nên xác định rằng:

PeriodType type = PeriodType.forFields(new DurationFieldType[] { 
              DurationFieldType.days(), 
              DurationFieldType.minutes() 
             }); 

Period period = new Period(currentDate, date, type); 
// Now you'll just have minutes and days 

Điều quan trọng là phải hiểu sự khác biệt giữa một Duration đó là "một số lượng nhất định của mili giây, có thể được lấy theo đơn vị khác nhau "và một Period có hiệu quả là ánh xạ từ một tập hợp các loại trường (phút, tháng, ngày, v.v ...) thành giá trị. Không có một giá trị thời gian duy nhất trong một khoảng thời gian - đó là một tập hợp các giá trị.

+0

Ôi trời, tôi chưa bao giờ hiểu điều đó. Tôi đã chứng ngộ. –

+2

@LouisWasserman: Tôi đang ở trong tình huống hơi đặc biệt khi chuyển Joda Time sang .NET. Vì vậy, tôi có thể hiểu rõ hơn về hầu hết :) –

3

Dường như nó đang làm việc tốt, tất cả các bạn cần phải làm để có được giá trị tích cực là trao đổi xung quanh datecurrentDate:

Period period = new Period(date, currentDate); 
+0

Tôi nghĩ rằng OP lo ngại rằng một lượt xem "phút" là đưa ra 15, và cái kia đang cho 1095 ... –

+0

Điểm tốt, tôi thấy điều đó ngay bây giờ. – jbranchaud

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