2012-04-13 20 views
6

Làm cách nào chúng tôi có thể hiển thị thời gian đã trôi qua chỉ với 1 trường.JodaTime PeriodFormat, Thời gian đã trôi qua chỉ với 1 Trường

Ví dụ

  • Thời gian = 1 năm 4 tháng và 5 ngày ==> Kết quả = "1 năm trước"
  • Thời gian = 3 tháng 5 ngày ==> Kết quả = "3 tháng trước"
  • Thời gian = 4 giờ 5 phút ==> Kết quả = "4 giờ trước"

Vì vậy, tôi chỉ muốn các trường có sẵn cao nhất.

+0

@JonSkeet - Tôi đã tự hỏi làm thế nào để thoát khỏi của những màu sắc đó! – assylias

Trả lời

0

Thuật toán rõ ràng sẽ là kiểm tra nếu năm> 0, trong trường hợp bạn sử dụng, nếu không kiểm tra nếu tháng> 0 vv Có thể có điều gì đó thanh lịch hơn nhưng sẽ hoạt động trong ít hơn 15 dòng mã ...

2

Không có phương pháp nào trong Joda-Time để thực hiện việc này, vì vậy bạn sẽ phải kiểm tra từng trường theo cách thủ công.

1

này sẽ làm việc

val startDate = new DateTime(millis).withZone(dateTimeZone) 
val endDate = new DateTime(dateTimeZone) 

val period = new Period(startDate, endDate) 

val localized = PeriodFormat.wordBased(localeLanguageCode).print(period) 
val splitted = localized.split(",|and") 

Vì vậy, giá trị tách ra sẽ là một mảng chứa các phân đoạn thời gian, từ một khoảng thời gian lớn hơn để một thấp hơn.

Phần đầu của mảng là giá trị bạn đang tìm kiếm.

slitted.head + "Ago." 

* Bạn nên thay đổi các mẫu biểu thức chính trên phương pháp phân chia tùy thuộc vào Locale của bạn hoặc nếu bạn đang sử dụng một định dạng tùy chỉnh chứ không phải là một mặc định (PeriodFormatterBuilder)

Ex. Mảng ("4 năm", "2 tháng", "5 ngày", "18 giờ", "15 phút", "10 giây", "50 mili giây")

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