Tôi đang đối phó với một cái gì đó rất giống với những gì đã được yêu cầu ở đây - compare Joda-Time time zones nhưng nó dường như không làm việc cho tôi.So sánh hai đối tượng DateTime Thời gian Joda
Dưới đây là một đoạn mã mà tôi đang thử nghiệm Joda-TimeDateTime với -
DateTime estDT = new DateTime(DateTimeZone.forID("America/Puerto_Rico")).withMillisOfSecond(0);
DateTime londonDT = new DateTime(DateTimeZone.forID("Europe/London")).withMillisOfSecond(0);
System.out.println("Comparison " + londonDT.isBefore(estDT));
System.out.println("Comparison " + londonDT.isAfter(estDT));
Điều thú vị là đủ, tôi nhận được 'false' từ cả những điều khoản sysout trên. Bất cứ ai có thể vui lòng giải thích những gì sẽ là đúng cách để làm so sánh này?
Về mặt kỹ thuật, londonDT đại diện cho một thời điểm * sau * estDT như điểm trên timeline của vũ trụ. Hai dòng mã riêng biệt có nghĩa là hai mẫu riêng biệt của đồng hồ của máy tính, do đó, dòng thứ hai xảy ra muộn hơn ngày 1. DateTime có độ phân giải mili giây, vì vậy nếu cả hai dòng mã đó xảy ra trong cùng một phần nghìn giây của đồng hồ của máy tính thì chúng sẽ bằng nhau. Đây là may mắn (cơ hội). Tùy thuộc vào việc chuỗi Java đã bị trì hoãn/bị treo trong khi thực hiện hay chưa, hoặc nếu nó chạy trên một máy tính chậm hơn thì hai DateTimes đó có thể khác nhau. –
Cả hai chúng tôi đều hơi mạnh. Hai * có thể * đại diện cho cùng một tức thời trong thời gian, cho các cuộc gọi đến withMillisOfSecond (0). Tuy nhiên, chúng có thể khác nhau, nếu chúng xảy ra vào các giây khác nhau (ví dụ: millis = 999 và millis = 0). Nếu cùng một thời điểm thực sự mong muốn, phương thức withZone() sẽ đáng tin cậy hơn là nhận được ngay lập tức hai lần. Tuy nhiên, nhiều khả năng OP sẽ muốn hai trường hợp khác nhau trong thời gian, được cung cấp như đầu vào. –