2012-01-11 40 views
8

Tôi có một số dữ liệu về giờ mở cửa mà tôi đang cố gắng trình bày bằng cách sử dụng Joda-Time.Làm thế nào tôi có thể thể hiện một phần khoảng thời gian bằng cách sử dụng Joda-Time?

Giờ mở điển hình của cái nhìn ngày như thế này:

mở 9-12, và từ 13 đến 20.

lý do chính của tôi cho đại diện cho họ vào đơn vị Joda thời gian, là để xác nhận họ:

  • Kiểm tra xem giờ mở cửa có giá trị (9 là trước 12, vv)
  • Kiểm tra rằng không có mở khoảng chồng chéo ("9-12 và 11-13" là bất hợp pháp)

API-khôn ngoan, lớp Joda-Time Interval có các phương pháp tôi cần để thực hiện xác thực này, nhưng khoảng thời gian là cặp các phiên bản trong ngày-thời gian-liên tục. Tôi muốn đại diện cho họ độc lập với thời gian tuyệt đối, giống như một Khoảng thời gian của hai partials LocalTime. Điều này có thể không?

+2

Tôi nghĩ rằng bạn đã cung cấp những anh chàng trả lời tốt nhất. Tôi muốn thực hiện nó như là một OpenTimeRange với một bắt đầu và kết thúc 'LocalTime' và sau đó có một mảng của chúng để xác định giờ mở cửa cho một ngày. – Gray

Trả lời

5

Dưới đây là một nỗ lực tại một TimeInterval tùy chỉnh (khá giống như các giải pháp Grey nhận xét):

 
import org.joda.time.*; 

public class TimeInterval { 
    private static final Instant CONSTANT = new Instant(0); 
    private final LocalTime from; 
    private final LocalTime to; 

    public TimeInterval(LocalTime from, LocalTime to) { 
     this.from = from; 
     this.to = to; 
    } 

    public boolean isValid() { 
     try { return toInterval() != null; } 
     catch (IllegalArgumentException e) { return false;} 
    } 

    public boolean overlapsWith(TimeInterval timeInterval) { 
     return this.toInterval().overlaps(timeInterval.toInterval()); 
    } 

    /** 
    * @return this represented as a proper Interval 
    * @throws IllegalArgumentException if invalid (to is before from) 
    */ 
    private Interval toInterval() throws IllegalArgumentException { 
     return new Interval(from.toDateTime(CONSTANT), to.toDateTime(CONSTANT)); 
    } 
} 
+3

Có, bạn cần tự viết loại lớp khoảng này. BTW, phương thức toInterval() của bạn bị hỏng, bởi vì nó có được ngay lập tức hiện tại hai lần (một lần trong mỗi toDateTimeToday). Nó có thể trả về hai ngày khác nhau nếu được gọi chính xác mỗi bên của nửa đêm (một điều kiện chủng tộc). – JodaStephen

+0

Cảm ơn bạn đã xem xét, Stephen. Tôi đã cập nhật mã để luôn đánh giá Khoảng thời gian vào một ngày không đổi. –

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