test/java/time/tck/java/time/TCKOffsetDateTime.java

Print this page




 109 import java.time.LocalDateTime;
 110 import java.time.LocalTime;
 111 import java.time.Month;
 112 import java.time.OffsetDateTime;
 113 import java.time.OffsetTime;
 114 import java.time.Year;
 115 import java.time.ZoneId;
 116 import java.time.ZoneOffset;
 117 import java.time.ZonedDateTime;
 118 import java.time.chrono.IsoChronology;
 119 import java.time.format.DateTimeFormatter;
 120 import java.time.format.DateTimeParseException;
 121 import java.time.temporal.ChronoField;
 122 import java.time.temporal.ChronoUnit;
 123 import java.time.temporal.JulianFields;
 124 import java.time.temporal.Temporal;
 125 import java.time.temporal.TemporalAccessor;
 126 import java.time.temporal.TemporalAdjuster;
 127 import java.time.temporal.TemporalField;
 128 import java.time.temporal.TemporalQuery;

 129 import java.util.ArrayList;
 130 import java.util.Arrays;
 131 import java.util.List;
 132 
 133 import org.testng.annotations.BeforeMethod;
 134 import org.testng.annotations.DataProvider;
 135 import org.testng.annotations.Test;
 136 import test.java.time.MockSimplePeriod;
 137 
 138 /**
 139  * Test OffsetDateTime.
 140  */
 141 @Test
 142 public class TCKOffsetDateTime extends AbstractDateTimeTest {
 143 
 144     private static final ZoneId ZONE_PARIS = ZoneId.of("Europe/Paris");
 145     private static final ZoneId ZONE_GAZA = ZoneId.of("Asia/Gaza");
 146     private static final ZoneOffset OFFSET_PONE = ZoneOffset.ofHours(1);
 147     private static final ZoneOffset OFFSET_PTWO = ZoneOffset.ofHours(2);
 148     private static final ZoneOffset OFFSET_MONE = ZoneOffset.ofHours(-1);


 538         LocalTime localTime = LocalTime.of(h, m, s, n);
 539         LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
 540         OffsetDateTime a = OffsetDateTime.of(localDateTime, offset);
 541 
 542         assertEquals(a.getYear(), localDate.getYear());
 543         assertEquals(a.getMonth(), localDate.getMonth());
 544         assertEquals(a.getDayOfMonth(), localDate.getDayOfMonth());
 545         assertEquals(a.getDayOfYear(), localDate.getDayOfYear());
 546         assertEquals(a.getDayOfWeek(), localDate.getDayOfWeek());
 547 
 548         assertEquals(a.getHour(), localDateTime.getHour());
 549         assertEquals(a.getMinute(), localDateTime.getMinute());
 550         assertEquals(a.getSecond(), localDateTime.getSecond());
 551         assertEquals(a.getNano(), localDateTime.getNano());
 552 
 553         assertEquals(a.toOffsetTime(), OffsetTime.of(localTime, offset));
 554         assertEquals(a.toString(), localDateTime.toString() + offset.toString());
 555     }
 556 
 557     //-----------------------------------------------------------------------






























































 558     // get(TemporalField)
 559     //-----------------------------------------------------------------------
 560     @Test
 561     public void test_get_TemporalField() {
 562         OffsetDateTime test = OffsetDateTime.of(LocalDate.of(2008, 6, 30), LocalTime.of(12, 30, 40, 987654321), OFFSET_PONE);
 563         assertEquals(test.get(ChronoField.YEAR), 2008);
 564         assertEquals(test.get(ChronoField.MONTH_OF_YEAR), 6);
 565         assertEquals(test.get(ChronoField.DAY_OF_MONTH), 30);
 566         assertEquals(test.get(ChronoField.DAY_OF_WEEK), 1);
 567         assertEquals(test.get(ChronoField.DAY_OF_YEAR), 182);
 568 
 569         assertEquals(test.get(ChronoField.HOUR_OF_DAY), 12);
 570         assertEquals(test.get(ChronoField.MINUTE_OF_HOUR), 30);
 571         assertEquals(test.get(ChronoField.SECOND_OF_MINUTE), 40);
 572         assertEquals(test.get(ChronoField.NANO_OF_SECOND), 987654321);
 573         assertEquals(test.get(ChronoField.HOUR_OF_AMPM), 0);
 574         assertEquals(test.get(ChronoField.AMPM_OF_DAY), 1);
 575 
 576         assertEquals(test.get(ChronoField.OFFSET_SECONDS), 3600);
 577     }


1186     @Test
1187     public void test_toEpochSecond_beforeEpoch() {
1188         for (int i = 0; i < 100000; i++) {
1189             OffsetDateTime a = OffsetDateTime.of(1970, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC).minusSeconds(i);
1190             assertEquals(a.toEpochSecond(), -i);
1191         }
1192     }
1193 
1194     //-----------------------------------------------------------------------
1195     // compareTo()
1196     //-----------------------------------------------------------------------
1197     @Test
1198     public void test_compareTo_timeMins() {
1199         OffsetDateTime a = OffsetDateTime.of(2008, 6, 30, 11, 29, 3, 0, OFFSET_PONE);
1200         OffsetDateTime b = OffsetDateTime.of(2008, 6, 30, 11, 30, 2, 0, OFFSET_PONE);  // a is before b due to time
1201         assertEquals(a.compareTo(b) < 0, true);
1202         assertEquals(b.compareTo(a) > 0, true);
1203         assertEquals(a.compareTo(a) == 0, true);
1204         assertEquals(b.compareTo(b) == 0, true);
1205         assertEquals(a.toInstant().compareTo(b.toInstant()) < 0, true);

1206     }
1207 
1208     @Test
1209     public void test_compareTo_timeSecs() {
1210         OffsetDateTime a = OffsetDateTime.of(2008, 6, 30, 11, 29, 2, 0, OFFSET_PONE);
1211         OffsetDateTime b = OffsetDateTime.of(2008, 6, 30, 11, 29, 3, 0, OFFSET_PONE);  // a is before b due to time
1212         assertEquals(a.compareTo(b) < 0, true);
1213         assertEquals(b.compareTo(a) > 0, true);
1214         assertEquals(a.compareTo(a) == 0, true);
1215         assertEquals(b.compareTo(b) == 0, true);
1216         assertEquals(a.toInstant().compareTo(b.toInstant()) < 0, true);

1217     }
1218 
1219     @Test
1220     public void test_compareTo_timeNanos() {
1221         OffsetDateTime a = OffsetDateTime.of(2008, 6, 30, 11, 29, 40, 4, OFFSET_PONE);
1222         OffsetDateTime b = OffsetDateTime.of(2008, 6, 30, 11, 29, 40, 5, OFFSET_PONE);  // a is before b due to time
1223         assertEquals(a.compareTo(b) < 0, true);
1224         assertEquals(b.compareTo(a) > 0, true);
1225         assertEquals(a.compareTo(a) == 0, true);
1226         assertEquals(b.compareTo(b) == 0, true);
1227         assertEquals(a.toInstant().compareTo(b.toInstant()) < 0, true);

1228     }
1229 
1230     @Test
1231     public void test_compareTo_offset() {
1232         OffsetDateTime a = OffsetDateTime.of(2008, 6, 30, 11, 30, 0, 0, OFFSET_PTWO);
1233         OffsetDateTime b = OffsetDateTime.of(2008, 6, 30, 11, 30, 0, 0, OFFSET_PONE);  // a is before b due to offset
1234         assertEquals(a.compareTo(b) < 0, true);
1235         assertEquals(b.compareTo(a) > 0, true);
1236         assertEquals(a.compareTo(a) == 0, true);
1237         assertEquals(b.compareTo(b) == 0, true);
1238         assertEquals(a.toInstant().compareTo(b.toInstant()) < 0, true);

1239     }
1240 
1241     @Test
1242     public void test_compareTo_offsetNanos() {
1243         OffsetDateTime a = OffsetDateTime.of(2008, 6, 30, 11, 30, 40, 6, OFFSET_PTWO);
1244         OffsetDateTime b = OffsetDateTime.of(2008, 6, 30, 11, 30, 40, 5, OFFSET_PONE);  // a is before b due to offset
1245         assertEquals(a.compareTo(b) < 0, true);
1246         assertEquals(b.compareTo(a) > 0, true);
1247         assertEquals(a.compareTo(a) == 0, true);
1248         assertEquals(b.compareTo(b) == 0, true);
1249         assertEquals(a.toInstant().compareTo(b.toInstant()) < 0, true);

1250     }
1251 
1252     @Test
1253     public void test_compareTo_both() {
1254         OffsetDateTime a = OffsetDateTime.of(2008, 6, 30, 11, 50, 0, 0, OFFSET_PTWO);
1255         OffsetDateTime b = OffsetDateTime.of(2008, 6, 30, 11, 20, 0, 0, OFFSET_PONE);  // a is before b on instant scale
1256         assertEquals(a.compareTo(b) < 0, true);
1257         assertEquals(b.compareTo(a) > 0, true);
1258         assertEquals(a.compareTo(a) == 0, true);
1259         assertEquals(b.compareTo(b) == 0, true);
1260         assertEquals(a.toInstant().compareTo(b.toInstant()) < 0, true);

1261     }
1262 
1263     @Test
1264     public void test_compareTo_bothNanos() {
1265         OffsetDateTime a = OffsetDateTime.of(2008, 6, 30, 11, 20, 40, 4, OFFSET_PTWO);
1266         OffsetDateTime b = OffsetDateTime.of(2008, 6, 30, 10, 20, 40, 5, OFFSET_PONE);  // a is before b on instant scale
1267         assertEquals(a.compareTo(b) < 0, true);
1268         assertEquals(b.compareTo(a) > 0, true);
1269         assertEquals(a.compareTo(a) == 0, true);
1270         assertEquals(b.compareTo(b) == 0, true);
1271         assertEquals(a.toInstant().compareTo(b.toInstant()) < 0, true);








1272     }
1273 
1274     @Test
1275     public void test_compareTo_hourDifference() {
1276         OffsetDateTime a = OffsetDateTime.of(2008, 6, 30, 10, 0, 0, 0, OFFSET_PONE);
1277         OffsetDateTime b = OffsetDateTime.of(2008, 6, 30, 11, 0, 0, 0, OFFSET_PTWO);  // a is before b despite being same time-line time
1278         assertEquals(a.compareTo(b) < 0, true);
1279         assertEquals(b.compareTo(a) > 0, true);
1280         assertEquals(a.compareTo(a) == 0, true);
1281         assertEquals(b.compareTo(b) == 0, true);
1282         assertEquals(a.toInstant().compareTo(b.toInstant()) == 0, true);
1283     }
1284 
1285     @Test
1286     public void test_compareTo_max() {
1287         OffsetDateTime a = OffsetDateTime.of(Year.MAX_VALUE, 12, 31, 23, 59, 0, 0, OFFSET_MONE);
1288         OffsetDateTime b = OffsetDateTime.of(Year.MAX_VALUE, 12, 31, 23, 59, 0, 0, OFFSET_MTWO);  // a is before b due to offset
1289         assertEquals(a.compareTo(b) < 0, true);
1290         assertEquals(b.compareTo(a) > 0, true);
1291         assertEquals(a.compareTo(a) == 0, true);




 109 import java.time.LocalDateTime;
 110 import java.time.LocalTime;
 111 import java.time.Month;
 112 import java.time.OffsetDateTime;
 113 import java.time.OffsetTime;
 114 import java.time.Year;
 115 import java.time.ZoneId;
 116 import java.time.ZoneOffset;
 117 import java.time.ZonedDateTime;
 118 import java.time.chrono.IsoChronology;
 119 import java.time.format.DateTimeFormatter;
 120 import java.time.format.DateTimeParseException;
 121 import java.time.temporal.ChronoField;
 122 import java.time.temporal.ChronoUnit;
 123 import java.time.temporal.JulianFields;
 124 import java.time.temporal.Temporal;
 125 import java.time.temporal.TemporalAccessor;
 126 import java.time.temporal.TemporalAdjuster;
 127 import java.time.temporal.TemporalField;
 128 import java.time.temporal.TemporalQuery;
 129 import java.time.temporal.TemporalUnit;
 130 import java.util.ArrayList;
 131 import java.util.Arrays;
 132 import java.util.List;
 133 
 134 import org.testng.annotations.BeforeMethod;
 135 import org.testng.annotations.DataProvider;
 136 import org.testng.annotations.Test;
 137 import test.java.time.MockSimplePeriod;
 138 
 139 /**
 140  * Test OffsetDateTime.
 141  */
 142 @Test
 143 public class TCKOffsetDateTime extends AbstractDateTimeTest {
 144 
 145     private static final ZoneId ZONE_PARIS = ZoneId.of("Europe/Paris");
 146     private static final ZoneId ZONE_GAZA = ZoneId.of("Asia/Gaza");
 147     private static final ZoneOffset OFFSET_PONE = ZoneOffset.ofHours(1);
 148     private static final ZoneOffset OFFSET_PTWO = ZoneOffset.ofHours(2);
 149     private static final ZoneOffset OFFSET_MONE = ZoneOffset.ofHours(-1);


 539         LocalTime localTime = LocalTime.of(h, m, s, n);
 540         LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
 541         OffsetDateTime a = OffsetDateTime.of(localDateTime, offset);
 542 
 543         assertEquals(a.getYear(), localDate.getYear());
 544         assertEquals(a.getMonth(), localDate.getMonth());
 545         assertEquals(a.getDayOfMonth(), localDate.getDayOfMonth());
 546         assertEquals(a.getDayOfYear(), localDate.getDayOfYear());
 547         assertEquals(a.getDayOfWeek(), localDate.getDayOfWeek());
 548 
 549         assertEquals(a.getHour(), localDateTime.getHour());
 550         assertEquals(a.getMinute(), localDateTime.getMinute());
 551         assertEquals(a.getSecond(), localDateTime.getSecond());
 552         assertEquals(a.getNano(), localDateTime.getNano());
 553 
 554         assertEquals(a.toOffsetTime(), OffsetTime.of(localTime, offset));
 555         assertEquals(a.toString(), localDateTime.toString() + offset.toString());
 556     }
 557 
 558     //-----------------------------------------------------------------------
 559     // isSupported(TemporalField)
 560     //-----------------------------------------------------------------------
 561     @Test
 562     public void test_isSupported_TemporalField() {
 563         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported((TemporalField) null), false);
 564         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.NANO_OF_SECOND), true);
 565         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.NANO_OF_DAY), true);
 566         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.MICRO_OF_SECOND), true);
 567         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.MICRO_OF_DAY), true);
 568         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.MILLI_OF_SECOND), true);
 569         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.MILLI_OF_DAY), true);
 570         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.SECOND_OF_MINUTE), true);
 571         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.SECOND_OF_DAY), true);
 572         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.MINUTE_OF_HOUR), true);
 573         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.MINUTE_OF_DAY), true);
 574         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.HOUR_OF_AMPM), true);
 575         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.CLOCK_HOUR_OF_AMPM), true);
 576         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.HOUR_OF_DAY), true);
 577         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.CLOCK_HOUR_OF_DAY), true);
 578         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.AMPM_OF_DAY), true);
 579         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.DAY_OF_WEEK), true);
 580         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH), true);
 581         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.ALIGNED_DAY_OF_WEEK_IN_YEAR), true);
 582         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.DAY_OF_MONTH), true);
 583         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.DAY_OF_YEAR), true);
 584         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.EPOCH_DAY), true);
 585         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.ALIGNED_WEEK_OF_MONTH), true);
 586         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.ALIGNED_WEEK_OF_YEAR), true);
 587         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.MONTH_OF_YEAR), true);
 588         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.PROLEPTIC_MONTH), true);
 589         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.YEAR), true);
 590         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.YEAR_OF_ERA), true);
 591         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.ERA), true);
 592         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.INSTANT_SECONDS), true);
 593         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoField.OFFSET_SECONDS), true);
 594     }
 595 
 596     //-----------------------------------------------------------------------
 597     // isSupported(TemporalUnit)
 598     //-----------------------------------------------------------------------
 599     @Test
 600     public void test_isSupported_TemporalUnit() {
 601         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported((TemporalUnit) null), false);
 602         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoUnit.NANOS), true);
 603         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoUnit.MICROS), true);
 604         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoUnit.MILLIS), true);
 605         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoUnit.SECONDS), true);
 606         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoUnit.MINUTES), true);
 607         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoUnit.HOURS), true);
 608         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoUnit.HALF_DAYS), true);
 609         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoUnit.DAYS), true);
 610         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoUnit.WEEKS), true);
 611         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoUnit.MONTHS), true);
 612         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoUnit.YEARS), true);
 613         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoUnit.DECADES), true);
 614         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoUnit.CENTURIES), true);
 615         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoUnit.MILLENNIA), true);
 616         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoUnit.ERAS), true);
 617         assertEquals(TEST_2008_6_30_11_30_59_000000500.isSupported(ChronoUnit.FOREVER), false);
 618     }
 619 
 620     //-----------------------------------------------------------------------
 621     // get(TemporalField)
 622     //-----------------------------------------------------------------------
 623     @Test
 624     public void test_get_TemporalField() {
 625         OffsetDateTime test = OffsetDateTime.of(LocalDate.of(2008, 6, 30), LocalTime.of(12, 30, 40, 987654321), OFFSET_PONE);
 626         assertEquals(test.get(ChronoField.YEAR), 2008);
 627         assertEquals(test.get(ChronoField.MONTH_OF_YEAR), 6);
 628         assertEquals(test.get(ChronoField.DAY_OF_MONTH), 30);
 629         assertEquals(test.get(ChronoField.DAY_OF_WEEK), 1);
 630         assertEquals(test.get(ChronoField.DAY_OF_YEAR), 182);
 631 
 632         assertEquals(test.get(ChronoField.HOUR_OF_DAY), 12);
 633         assertEquals(test.get(ChronoField.MINUTE_OF_HOUR), 30);
 634         assertEquals(test.get(ChronoField.SECOND_OF_MINUTE), 40);
 635         assertEquals(test.get(ChronoField.NANO_OF_SECOND), 987654321);
 636         assertEquals(test.get(ChronoField.HOUR_OF_AMPM), 0);
 637         assertEquals(test.get(ChronoField.AMPM_OF_DAY), 1);
 638 
 639         assertEquals(test.get(ChronoField.OFFSET_SECONDS), 3600);
 640     }


1249     @Test
1250     public void test_toEpochSecond_beforeEpoch() {
1251         for (int i = 0; i < 100000; i++) {
1252             OffsetDateTime a = OffsetDateTime.of(1970, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC).minusSeconds(i);
1253             assertEquals(a.toEpochSecond(), -i);
1254         }
1255     }
1256 
1257     //-----------------------------------------------------------------------
1258     // compareTo()
1259     //-----------------------------------------------------------------------
1260     @Test
1261     public void test_compareTo_timeMins() {
1262         OffsetDateTime a = OffsetDateTime.of(2008, 6, 30, 11, 29, 3, 0, OFFSET_PONE);
1263         OffsetDateTime b = OffsetDateTime.of(2008, 6, 30, 11, 30, 2, 0, OFFSET_PONE);  // a is before b due to time
1264         assertEquals(a.compareTo(b) < 0, true);
1265         assertEquals(b.compareTo(a) > 0, true);
1266         assertEquals(a.compareTo(a) == 0, true);
1267         assertEquals(b.compareTo(b) == 0, true);
1268         assertEquals(a.toInstant().compareTo(b.toInstant()) < 0, true);
1269         assertEquals(OffsetDateTime.timeLineOrder().compare(a, b) < 0, true);
1270     }
1271 
1272     @Test
1273     public void test_compareTo_timeSecs() {
1274         OffsetDateTime a = OffsetDateTime.of(2008, 6, 30, 11, 29, 2, 0, OFFSET_PONE);
1275         OffsetDateTime b = OffsetDateTime.of(2008, 6, 30, 11, 29, 3, 0, OFFSET_PONE);  // a is before b due to time
1276         assertEquals(a.compareTo(b) < 0, true);
1277         assertEquals(b.compareTo(a) > 0, true);
1278         assertEquals(a.compareTo(a) == 0, true);
1279         assertEquals(b.compareTo(b) == 0, true);
1280         assertEquals(a.toInstant().compareTo(b.toInstant()) < 0, true);
1281         assertEquals(OffsetDateTime.timeLineOrder().compare(a, b) < 0, true);
1282     }
1283 
1284     @Test
1285     public void test_compareTo_timeNanos() {
1286         OffsetDateTime a = OffsetDateTime.of(2008, 6, 30, 11, 29, 40, 4, OFFSET_PONE);
1287         OffsetDateTime b = OffsetDateTime.of(2008, 6, 30, 11, 29, 40, 5, OFFSET_PONE);  // a is before b due to time
1288         assertEquals(a.compareTo(b) < 0, true);
1289         assertEquals(b.compareTo(a) > 0, true);
1290         assertEquals(a.compareTo(a) == 0, true);
1291         assertEquals(b.compareTo(b) == 0, true);
1292         assertEquals(a.toInstant().compareTo(b.toInstant()) < 0, true);
1293         assertEquals(OffsetDateTime.timeLineOrder().compare(a, b) < 0, true);
1294     }
1295 
1296     @Test
1297     public void test_compareTo_offset() {
1298         OffsetDateTime a = OffsetDateTime.of(2008, 6, 30, 11, 30, 0, 0, OFFSET_PTWO);
1299         OffsetDateTime b = OffsetDateTime.of(2008, 6, 30, 11, 30, 0, 0, OFFSET_PONE);  // a is before b due to offset
1300         assertEquals(a.compareTo(b) < 0, true);
1301         assertEquals(b.compareTo(a) > 0, true);
1302         assertEquals(a.compareTo(a) == 0, true);
1303         assertEquals(b.compareTo(b) == 0, true);
1304         assertEquals(a.toInstant().compareTo(b.toInstant()) < 0, true);
1305         assertEquals(OffsetDateTime.timeLineOrder().compare(a, b) < 0, true);
1306     }
1307 
1308     @Test
1309     public void test_compareTo_offsetNanos() {
1310         OffsetDateTime a = OffsetDateTime.of(2008, 6, 30, 11, 30, 40, 6, OFFSET_PTWO);
1311         OffsetDateTime b = OffsetDateTime.of(2008, 6, 30, 11, 30, 40, 5, OFFSET_PONE);  // a is before b due to offset
1312         assertEquals(a.compareTo(b) < 0, true);
1313         assertEquals(b.compareTo(a) > 0, true);
1314         assertEquals(a.compareTo(a) == 0, true);
1315         assertEquals(b.compareTo(b) == 0, true);
1316         assertEquals(a.toInstant().compareTo(b.toInstant()) < 0, true);
1317         assertEquals(OffsetDateTime.timeLineOrder().compare(a, b) < 0, true);
1318     }
1319 
1320     @Test
1321     public void test_compareTo_both() {
1322         OffsetDateTime a = OffsetDateTime.of(2008, 6, 30, 11, 50, 0, 0, OFFSET_PTWO);
1323         OffsetDateTime b = OffsetDateTime.of(2008, 6, 30, 11, 20, 0, 0, OFFSET_PONE);  // a is before b on instant scale
1324         assertEquals(a.compareTo(b) < 0, true);
1325         assertEquals(b.compareTo(a) > 0, true);
1326         assertEquals(a.compareTo(a) == 0, true);
1327         assertEquals(b.compareTo(b) == 0, true);
1328         assertEquals(a.toInstant().compareTo(b.toInstant()) < 0, true);
1329         assertEquals(OffsetDateTime.timeLineOrder().compare(a, b) < 0, true);
1330     }
1331 
1332     @Test
1333     public void test_compareTo_bothNanos() {
1334         OffsetDateTime a = OffsetDateTime.of(2008, 6, 30, 11, 20, 40, 4, OFFSET_PTWO);
1335         OffsetDateTime b = OffsetDateTime.of(2008, 6, 30, 10, 20, 40, 5, OFFSET_PONE);  // a is before b on instant scale
1336         assertEquals(a.compareTo(b) < 0, true);
1337         assertEquals(b.compareTo(a) > 0, true);
1338         assertEquals(a.compareTo(a) == 0, true);
1339         assertEquals(b.compareTo(b) == 0, true);
1340         assertEquals(a.toInstant().compareTo(b.toInstant()) < 0, true);
1341         assertEquals(OffsetDateTime.timeLineOrder().compare(a, b) < 0, true);
1342     }
1343 
1344     @Test
1345     public void test_compareTo_bothInstantComparator() {
1346         OffsetDateTime a = OffsetDateTime.of(2008, 6, 30, 11, 20, 40, 4, OFFSET_PTWO);
1347         OffsetDateTime b = OffsetDateTime.of(2008, 6, 30, 10, 20, 40, 5, OFFSET_PONE);
1348         assertEquals(a.compareTo(b), OffsetDateTime.timeLineOrder().compare(a,b), "for nano != nano, compareTo and timeLineOrder() should be the same");
1349     }
1350 
1351     @Test
1352     public void test_compareTo_hourDifference() {
1353         OffsetDateTime a = OffsetDateTime.of(2008, 6, 30, 10, 0, 0, 0, OFFSET_PONE);
1354         OffsetDateTime b = OffsetDateTime.of(2008, 6, 30, 11, 0, 0, 0, OFFSET_PTWO);  // a is before b despite being same time-line time
1355         assertEquals(a.compareTo(b) < 0, true);
1356         assertEquals(b.compareTo(a) > 0, true);
1357         assertEquals(a.compareTo(a) == 0, true);
1358         assertEquals(b.compareTo(b) == 0, true);
1359         assertEquals(a.toInstant().compareTo(b.toInstant()) == 0, true);
1360     }
1361 
1362     @Test
1363     public void test_compareTo_max() {
1364         OffsetDateTime a = OffsetDateTime.of(Year.MAX_VALUE, 12, 31, 23, 59, 0, 0, OFFSET_MONE);
1365         OffsetDateTime b = OffsetDateTime.of(Year.MAX_VALUE, 12, 31, 23, 59, 0, 0, OFFSET_MTWO);  // a is before b due to offset
1366         assertEquals(a.compareTo(b) < 0, true);
1367         assertEquals(b.compareTo(a) > 0, true);
1368         assertEquals(a.compareTo(a) == 0, true);