DateIntervalFormatTest.java revision 4409dd652330c8eaaa32eec36ce1600aeeea1464
1/* 2 * Copyright (C) 2013 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package libcore.icu; 18 19import java.util.Arrays; 20import java.util.Locale; 21 22import java.util.Calendar; 23import java.util.Date; 24import java.util.TimeZone; 25 26import static libcore.icu.DateIntervalFormat.*; 27 28public class DateIntervalFormatTest extends junit.framework.TestCase { 29 private static final long MINUTE = 60 * 1000; 30 private static final long HOUR = 60 * MINUTE; 31 private static final long DAY = 24 * HOUR; 32 private static final long MONTH = 31 * DAY; 33 private static final long YEAR = 12 * MONTH; 34 35 // These are the old CTS tests for DateIntervalFormat.formatDateRange. 36 public void test_formatDateInterval() throws Exception { 37 TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles"); 38 39 Calendar c = Calendar.getInstance(tz); 40 c.set(Calendar.MONTH, Calendar.JANUARY); 41 c.set(Calendar.DAY_OF_MONTH, 19); 42 c.set(Calendar.HOUR_OF_DAY, 3); 43 c.set(Calendar.MINUTE, 30); 44 c.set(Calendar.SECOND, 15); 45 long timeWithCurrentYear = c.getTimeInMillis(); 46 47 c.set(Calendar.YEAR, 2009); 48 long fixedTime = c.getTimeInMillis(); 49 50 c.set(Calendar.MINUTE, 0); 51 c.set(Calendar.SECOND, 0); 52 long onTheHour = c.getTimeInMillis(); 53 54 long noonDuration = (8 * 60 + 30) * 60 * 1000 - 15 * 1000; 55 long midnightDuration = (3 * 60 + 30) * 60 * 1000 + 15 * 1000; 56 57 Locale de_DE = new Locale("de", "DE"); 58 Locale en_US = new Locale("en", "US"); 59 Locale es_ES = new Locale("es", "ES"); 60 Locale es_US = new Locale("es", "US"); 61 62 assertEquals("Monday", formatDateRange(en_US, tz, fixedTime, fixedTime + HOUR, FORMAT_SHOW_WEEKDAY)); 63 assertEquals("January 19", formatDateRange(en_US, tz, timeWithCurrentYear, timeWithCurrentYear + HOUR, FORMAT_SHOW_DATE)); 64 assertEquals("3:30 AM", formatDateRange(en_US, tz, fixedTime, fixedTime, FORMAT_SHOW_TIME)); 65 assertEquals("January 19, 2009", formatDateRange(en_US, tz, fixedTime, fixedTime + HOUR, FORMAT_SHOW_YEAR)); 66 assertEquals("January 19", formatDateRange(en_US, tz, fixedTime, fixedTime + HOUR, FORMAT_NO_YEAR)); 67 assertEquals("January", formatDateRange(en_US, tz, timeWithCurrentYear, timeWithCurrentYear + HOUR, FORMAT_NO_MONTH_DAY)); 68 assertEquals("3:30 AM", formatDateRange(en_US, tz, fixedTime, fixedTime, FORMAT_12HOUR | FORMAT_SHOW_TIME)); 69 assertEquals("03:30", formatDateRange(en_US, tz, fixedTime, fixedTime, FORMAT_24HOUR | FORMAT_SHOW_TIME)); 70 assertEquals("3:30 AM", formatDateRange(en_US, tz, fixedTime, fixedTime, FORMAT_12HOUR /*| FORMAT_CAP_AMPM*/ | FORMAT_SHOW_TIME)); 71 assertEquals("12:00 PM", formatDateRange(en_US, tz, fixedTime + noonDuration, fixedTime + noonDuration, FORMAT_12HOUR | FORMAT_SHOW_TIME)); 72 assertEquals("12:00 PM", formatDateRange(en_US, tz, fixedTime + noonDuration, fixedTime + noonDuration, FORMAT_12HOUR | FORMAT_SHOW_TIME /*| FORMAT_CAP_NOON*/)); 73 assertEquals("12:00 PM", formatDateRange(en_US, tz, fixedTime + noonDuration, fixedTime + noonDuration, FORMAT_12HOUR /*| FORMAT_NO_NOON*/ | FORMAT_SHOW_TIME)); 74 assertEquals("12:00 AM", formatDateRange(en_US, tz, fixedTime - midnightDuration, fixedTime - midnightDuration, FORMAT_12HOUR | FORMAT_SHOW_TIME /*| FORMAT_NO_MIDNIGHT*/)); 75 assertEquals("3:30 AM", formatDateRange(en_US, tz, fixedTime, fixedTime, FORMAT_SHOW_TIME | FORMAT_UTC)); 76 assertEquals("3 AM", formatDateRange(en_US, tz, onTheHour, onTheHour, FORMAT_SHOW_TIME | FORMAT_ABBREV_TIME)); 77 assertEquals("Mon", formatDateRange(en_US, tz, fixedTime, fixedTime + HOUR, FORMAT_SHOW_WEEKDAY | FORMAT_ABBREV_WEEKDAY)); 78 assertEquals("Jan 19", formatDateRange(en_US, tz, timeWithCurrentYear, timeWithCurrentYear + HOUR, FORMAT_SHOW_DATE | FORMAT_ABBREV_MONTH)); 79 assertEquals("Jan 19", formatDateRange(en_US, tz, timeWithCurrentYear, timeWithCurrentYear + HOUR, FORMAT_SHOW_DATE | FORMAT_ABBREV_ALL)); 80 81 assertEquals("1/19/2009", formatDateRange(en_US, tz, fixedTime, fixedTime + 3 * HOUR, FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE)); 82 assertEquals("1/19/2009 – 1/22/2009", formatDateRange(en_US, tz, fixedTime, fixedTime + 3 * DAY, FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE)); 83 assertEquals("1/19/2009 – 4/22/2009", formatDateRange(en_US, tz, fixedTime, fixedTime + 3 * MONTH, FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE)); 84 assertEquals("1/19/2009 – 2/9/2012", formatDateRange(en_US, tz, fixedTime, fixedTime + 3 * YEAR, FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE)); 85 86 assertEquals("19.1.2009", formatDateRange(de_DE, tz, fixedTime, fixedTime + HOUR, FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE)); 87 assertEquals("19.01.2009 - 22.01.2009", formatDateRange(de_DE, tz, fixedTime, fixedTime + 3 * DAY, FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE)); 88 assertEquals("19.01.2009 - 22.04.2009", formatDateRange(de_DE, tz, fixedTime, fixedTime + 3 * MONTH, FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE)); 89 assertEquals("19.01.2009 - 09.02.2012", formatDateRange(de_DE, tz, fixedTime, fixedTime + 3 * YEAR, FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE)); 90 91 assertEquals("1/19/2009", formatDateRange(es_US, tz, fixedTime, fixedTime + HOUR, FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE)); 92 assertEquals("19/1/2009 – 22/1/2009", formatDateRange(es_US, tz, fixedTime, fixedTime + 3 * DAY, FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE)); 93 assertEquals("19/1/2009 – 22/4/2009", formatDateRange(es_US, tz, fixedTime, fixedTime + 3 * MONTH, FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE)); 94 assertEquals("19/1/2009 – 9/2/2012", formatDateRange(es_US, tz, fixedTime, fixedTime + 3 * YEAR, FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE)); 95 96 assertEquals("19/1/2009", formatDateRange(es_ES, tz, fixedTime, fixedTime + HOUR, FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE)); 97 assertEquals("19/1/2009 – 22/1/2009", formatDateRange(es_ES, tz, fixedTime, fixedTime + 3 * DAY, FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE)); 98 assertEquals("19/1/2009 – 22/4/2009", formatDateRange(es_ES, tz, fixedTime, fixedTime + 3 * MONTH, FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE)); 99 assertEquals("19/1/2009 – 9/2/2012", formatDateRange(es_ES, tz, fixedTime, fixedTime + 3 * YEAR, FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE)); 100 101 // These are some random other test cases I came up with. 102 103 assertEquals("January 19–22, 2009", formatDateRange(en_US, tz, fixedTime, fixedTime + 3 * DAY, 0)); 104 assertEquals("Jan 19–22, 2009", formatDateRange(en_US, tz, fixedTime, fixedTime + 3 * DAY, FORMAT_SHOW_DATE | FORMAT_ABBREV_ALL)); 105 assertEquals("Mon, Jan 19 – Thu, Jan 22, 2009", formatDateRange(en_US, tz, fixedTime, fixedTime + 3 * DAY, FORMAT_SHOW_WEEKDAY | FORMAT_ABBREV_ALL)); 106 assertEquals("Monday, January 19 – Thursday, January 22, 2009", formatDateRange(en_US, tz, fixedTime, fixedTime + 3 * DAY, FORMAT_SHOW_WEEKDAY)); 107 108 assertEquals("January 19 – April 22, 2009", formatDateRange(en_US, tz, fixedTime, fixedTime + 3 * MONTH, 0)); 109 assertEquals("Jan 19 – Apr 22, 2009", formatDateRange(en_US, tz, fixedTime, fixedTime + 3 * MONTH, FORMAT_SHOW_DATE | FORMAT_ABBREV_ALL)); 110 assertEquals("Mon, Jan 19 – Wed, Apr 22, 2009", formatDateRange(en_US, tz, fixedTime, fixedTime + 3 * MONTH, FORMAT_SHOW_WEEKDAY | FORMAT_ABBREV_ALL)); 111 assertEquals("January–April 2009", formatDateRange(en_US, tz, fixedTime, fixedTime + 3 * MONTH, FORMAT_NO_MONTH_DAY)); 112 113 assertEquals("Jan 19, 2009 – Feb 9, 2012", formatDateRange(en_US, tz, fixedTime, fixedTime + 3 * YEAR, FORMAT_SHOW_DATE | FORMAT_ABBREV_ALL)); 114 assertEquals("Jan 2009 – Feb 2012", formatDateRange(en_US, tz, fixedTime, fixedTime + 3 * YEAR, FORMAT_NO_MONTH_DAY | FORMAT_ABBREV_ALL)); 115 assertEquals("January 19, 2009 – February 9, 2012", formatDateRange(en_US, tz, fixedTime, fixedTime + 3 * YEAR, 0)); 116 assertEquals("Monday, January 19, 2009 – Thursday, February 9, 2012", formatDateRange(en_US, tz, fixedTime, fixedTime + 3 * YEAR, FORMAT_SHOW_WEEKDAY)); 117 118 // The same tests but for de_DE. 119 120 assertEquals("19.-22. Januar 2009", formatDateRange(de_DE, tz, fixedTime, fixedTime + 3 * DAY, 0)); 121 assertEquals("19.-22. Jan. 2009", formatDateRange(de_DE, tz, fixedTime, fixedTime + 3 * DAY, FORMAT_SHOW_DATE | FORMAT_ABBREV_ALL)); 122 assertEquals("Mo., 19. - Do., 22. Jan. 2009", formatDateRange(de_DE, tz, fixedTime, fixedTime + 3 * DAY, FORMAT_SHOW_WEEKDAY | FORMAT_ABBREV_ALL)); 123 assertEquals("Montag, 19. - Donnerstag, 22. Januar 2009", formatDateRange(de_DE, tz, fixedTime, fixedTime + 3 * DAY, FORMAT_SHOW_WEEKDAY)); 124 125 assertEquals("19. Januar - 22. April 2009", formatDateRange(de_DE, tz, fixedTime, fixedTime + 3 * MONTH, 0)); 126 assertEquals("19. Jan. - 22. Apr. 2009", formatDateRange(de_DE, tz, fixedTime, fixedTime + 3 * MONTH, FORMAT_SHOW_DATE | FORMAT_ABBREV_ALL)); 127 assertEquals("Mo., 19. Jan. - Mi., 22. Apr. 2009", formatDateRange(de_DE, tz, fixedTime, fixedTime + 3 * MONTH, FORMAT_SHOW_WEEKDAY | FORMAT_ABBREV_ALL)); 128 assertEquals("Januar-April 2009", formatDateRange(de_DE, tz, fixedTime, fixedTime + 3 * MONTH, FORMAT_NO_MONTH_DAY)); 129 130 assertEquals("19. Jan. 2009 - 9. Feb. 2012", formatDateRange(de_DE, tz, fixedTime, fixedTime + 3 * YEAR, FORMAT_SHOW_DATE | FORMAT_ABBREV_ALL)); 131 assertEquals("Jan. 2009 - Feb. 2012", formatDateRange(de_DE, tz, fixedTime, fixedTime + 3 * YEAR, FORMAT_NO_MONTH_DAY | FORMAT_ABBREV_ALL)); 132 assertEquals("19. Januar 2009 - 9. Februar 2012", formatDateRange(de_DE, tz, fixedTime, fixedTime + 3 * YEAR, 0)); 133 assertEquals("Montag, 19. Januar 2009 - Donnerstag, 9. Februar 2012", formatDateRange(de_DE, tz, fixedTime, fixedTime + 3 * YEAR, FORMAT_SHOW_WEEKDAY)); 134 135 // The same tests but for es_US. 136 137 assertEquals("19–22 enero 2009", formatDateRange(es_US, tz, fixedTime, fixedTime + 3 * DAY, 0)); 138 assertEquals("19–22 ene 2009", formatDateRange(es_US, tz, fixedTime, fixedTime + 3 * DAY, FORMAT_SHOW_DATE | FORMAT_ABBREV_ALL)); 139 assertEquals("lun 19 ene – jue 22 ene 2009", formatDateRange(es_US, tz, fixedTime, fixedTime + 3 * DAY, FORMAT_SHOW_WEEKDAY | FORMAT_ABBREV_ALL)); 140 assertEquals("lunes 19 enero – jueves 22 enero 2009", formatDateRange(es_US, tz, fixedTime, fixedTime + 3 * DAY, FORMAT_SHOW_WEEKDAY)); 141 142 assertEquals("19 enero – 22 abril 2009", formatDateRange(es_US, tz, fixedTime, fixedTime + 3 * MONTH, 0)); 143 assertEquals("19 ene – 22 abr 2009", formatDateRange(es_US, tz, fixedTime, fixedTime + 3 * MONTH, FORMAT_SHOW_DATE | FORMAT_ABBREV_ALL)); 144 assertEquals("lun 19 ene – mié 22 abr 2009", formatDateRange(es_US, tz, fixedTime, fixedTime + 3 * MONTH, FORMAT_SHOW_WEEKDAY | FORMAT_ABBREV_ALL)); 145 assertEquals("enero–abril 2009", formatDateRange(es_US, tz, fixedTime, fixedTime + 3 * MONTH, FORMAT_NO_MONTH_DAY)); 146 147 assertEquals("19 ene 2009 – 9 feb 2012", formatDateRange(es_US, tz, fixedTime, fixedTime + 3 * YEAR, FORMAT_SHOW_DATE | FORMAT_ABBREV_ALL)); 148 assertEquals("ene 2009 – feb 2012", formatDateRange(es_US, tz, fixedTime, fixedTime + 3 * YEAR, FORMAT_NO_MONTH_DAY | FORMAT_ABBREV_ALL)); 149 assertEquals("19 enero 2009 – 9 febrero 2012", formatDateRange(es_US, tz, fixedTime, fixedTime + 3 * YEAR, 0)); 150 assertEquals("lunes 19 enero 2009 – jueves 9 febrero 2012", formatDateRange(es_US, tz, fixedTime, fixedTime + 3 * YEAR, FORMAT_SHOW_WEEKDAY)); 151 152 // The same tests but for es_ES. 153 154 assertEquals("19–22 enero 2009", formatDateRange(es_ES, tz, fixedTime, fixedTime + 3 * DAY, 0)); 155 assertEquals("19–22 ene 2009", formatDateRange(es_ES, tz, fixedTime, fixedTime + 3 * DAY, FORMAT_SHOW_DATE | FORMAT_ABBREV_ALL)); 156 assertEquals("lun 19 ene – jue 22 ene 2009", formatDateRange(es_ES, tz, fixedTime, fixedTime + 3 * DAY, FORMAT_SHOW_WEEKDAY | FORMAT_ABBREV_ALL)); 157 assertEquals("lunes 19 enero – jueves 22 enero 2009", formatDateRange(es_ES, tz, fixedTime, fixedTime + 3 * DAY, FORMAT_SHOW_WEEKDAY)); 158 159 assertEquals("19 enero – 22 abril 2009", formatDateRange(es_ES, tz, fixedTime, fixedTime + 3 * MONTH, 0)); 160 assertEquals("19 ene – 22 abr 2009", formatDateRange(es_ES, tz, fixedTime, fixedTime + 3 * MONTH, FORMAT_SHOW_DATE | FORMAT_ABBREV_ALL)); 161 assertEquals("lun 19 ene – mié 22 abr 2009", formatDateRange(es_ES, tz, fixedTime, fixedTime + 3 * MONTH, FORMAT_SHOW_WEEKDAY | FORMAT_ABBREV_ALL)); 162 assertEquals("enero–abril 2009", formatDateRange(es_ES, tz, fixedTime, fixedTime + 3 * MONTH, FORMAT_NO_MONTH_DAY)); 163 164 assertEquals("19 ene 2009 – 9 feb 2012", formatDateRange(es_ES, tz, fixedTime, fixedTime + 3 * YEAR, FORMAT_SHOW_DATE | FORMAT_ABBREV_ALL)); 165 assertEquals("ene 2009 – feb 2012", formatDateRange(es_ES, tz, fixedTime, fixedTime + 3 * YEAR, FORMAT_NO_MONTH_DAY | FORMAT_ABBREV_ALL)); 166 assertEquals("19 enero 2009 – 9 febrero 2012", formatDateRange(es_ES, tz, fixedTime, fixedTime + 3 * YEAR, 0)); 167 assertEquals("lunes 19 enero 2009 – jueves 9 febrero 2012", formatDateRange(es_ES, tz, fixedTime, fixedTime + 3 * YEAR, FORMAT_SHOW_WEEKDAY)); 168 } 169 170 // http://b/8862241 - we should be able to format dates past 2038. 171 // See also http://code.google.com/p/android/issues/detail?id=13050. 172 public void test8862241() throws Exception { 173 Locale l = Locale.US; 174 TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles"); 175 Calendar c = Calendar.getInstance(tz); 176 c.set(2042, Calendar.JANUARY, 19, 3, 30); 177 long jan_19_2042 = c.getTimeInMillis(); 178 c.set(2046, Calendar.OCTOBER, 4, 3, 30); 179 long oct_4_2046 = c.getTimeInMillis(); 180 int flags = FORMAT_SHOW_DATE | FORMAT_ABBREV_ALL; 181 assertEquals("Jan 19, 2042 – Oct 4, 2046", formatDateRange(l, tz, jan_19_2042, oct_4_2046, flags)); 182 } 183 184 // http://b/10089890 - we should take the given time zone into account. 185 public void test10089890() throws Exception { 186 Locale l = Locale.US; 187 TimeZone utc = TimeZone.getTimeZone("UTC"); 188 TimeZone pacific = TimeZone.getTimeZone("America/Los_Angeles"); 189 int flags = FORMAT_SHOW_DATE | FORMAT_ABBREV_ALL | FORMAT_SHOW_TIME | FORMAT_24HOUR; 190 191 // The Unix epoch is UTC, so 0 is 1970-01-01T00:00Z... 192 assertEquals("Jan 1, 1970, 00:00 – Jan 2, 1970, 00:00", formatDateRange(l, utc, 0, DAY + 1, flags)); 193 // But MTV is hours behind, so 0 was still the afternoon of the previous day... 194 assertEquals("Dec 31, 1969, 16:00 – Jan 1, 1970, 16:00", formatDateRange(l, pacific, 0, DAY, flags)); 195 } 196 197 // http://b/10318326 - we can drop the minutes in a 12-hour time if they're zero, 198 // but not if we're using the 24-hour clock. That is: "4 PM" is reasonable, "16" is not. 199 public void test10318326() throws Exception { 200 long midnight = 0; 201 long teaTime = 16 * HOUR; 202 203 int time12 = FORMAT_12HOUR | FORMAT_SHOW_TIME; 204 int time24 = FORMAT_24HOUR | FORMAT_SHOW_TIME; 205 int abbr12 = time12 | FORMAT_ABBREV_ALL; 206 int abbr24 = time24 | FORMAT_ABBREV_ALL; 207 208 Locale l = Locale.US; 209 TimeZone utc = TimeZone.getTimeZone("UTC"); 210 211 // Full length on-the-hour times. 212 assertEquals("00:00", formatDateRange(l, utc, midnight, midnight, time24)); 213 assertEquals("12:00 AM", formatDateRange(l, utc, midnight, midnight, time12)); 214 assertEquals("16:00", formatDateRange(l, utc, teaTime, teaTime, time24)); 215 assertEquals("4:00 PM", formatDateRange(l, utc, teaTime, teaTime, time12)); 216 217 // Abbreviated on-the-hour times. 218 assertEquals("00:00", formatDateRange(l, utc, midnight, midnight, abbr24)); 219 assertEquals("12 AM", formatDateRange(l, utc, midnight, midnight, abbr12)); 220 assertEquals("16:00", formatDateRange(l, utc, teaTime, teaTime, abbr24)); 221 assertEquals("4 PM", formatDateRange(l, utc, teaTime, teaTime, abbr12)); 222 223 // Abbreviated on-the-hour ranges. 224 assertEquals("00:00–16:00", formatDateRange(l, utc, midnight, teaTime, abbr24)); 225 assertEquals("12 AM – 4 PM", formatDateRange(l, utc, midnight, teaTime, abbr12)); 226 227 // Abbreviated mixed ranges. 228 assertEquals("00:00–16:01", formatDateRange(l, utc, midnight, teaTime + MINUTE, abbr24)); 229 assertEquals("12:00 AM – 4:01 PM", formatDateRange(l, utc, midnight, teaTime + MINUTE, abbr12)); 230 } 231 232 // http://b/10560853 - when the time is not displayed, an end time 0 ms into the next day is 233 // considered to belong to the previous day. 234 public void test10560853_when_time_not_displayed() throws Exception { 235 Locale l = Locale.US; 236 TimeZone utc = TimeZone.getTimeZone("UTC"); 237 238 long midnight = 0; 239 long midnightNext = 1 * DAY; 240 241 int flags = FORMAT_SHOW_DATE | FORMAT_SHOW_WEEKDAY; 242 243 // An all-day event runs until 0 milliseconds into the next day, but is formatted as if it's 244 // just the first day. 245 assertEquals("Thursday, January 1, 1970", formatDateRange(l, utc, midnight, midnightNext, flags)); 246 247 // Run one millisecond over, though, and you're into the next day. 248 long nextMorning = 1 * DAY + 1; 249 assertEquals("Thursday, January 1 – Friday, January 2, 1970", formatDateRange(l, utc, midnight, nextMorning, flags)); 250 251 // But the same reasoning applies for that day. 252 long nextMidnight = 2 * DAY; 253 assertEquals("Thursday, January 1 – Friday, January 2, 1970", formatDateRange(l, utc, midnight, nextMidnight, flags)); 254 } 255 256 // http://b/10560853 - when the start and end times are otherwise on the same day, 257 // an end time 0 ms into the next day is considered to belong to the previous day. 258 public void test10560853_for_single_day_events() throws Exception { 259 Locale l = Locale.US; 260 TimeZone utc = TimeZone.getTimeZone("UTC"); 261 262 int flags = FORMAT_SHOW_TIME | FORMAT_24HOUR | FORMAT_SHOW_DATE; 263 264 assertEquals("January 1, 1970, 22:00–00:00", formatDateRange(l, utc, 22 * HOUR, 24 * HOUR, flags)); 265 assertEquals("January 1, 1970, 22:00 – January 2, 1970, 00:30", formatDateRange(l, utc, 22 * HOUR, 24 * HOUR + 30 * MINUTE, flags)); 266 } 267 268 // http://b/10209343 - even if the caller didn't explicitly ask us to include the year, 269 // we should do so for years other than the current year. 270 public void test10209343_when_not_this_year() { 271 Locale l = Locale.US; 272 TimeZone utc = TimeZone.getTimeZone("UTC"); 273 274 int flags = FORMAT_SHOW_DATE | FORMAT_SHOW_WEEKDAY | FORMAT_SHOW_TIME | FORMAT_24HOUR; 275 276 assertEquals("Thursday, January 1, 1970, 00:00", formatDateRange(l, utc, 0L, 0L, flags)); 277 278 long t1833 = ((long) Integer.MIN_VALUE + Integer.MIN_VALUE) * 1000L; 279 assertEquals("Sunday, November 24, 1833, 17:31", formatDateRange(l, utc, t1833, t1833, flags)); 280 281 long t1901 = Integer.MIN_VALUE * 1000L; 282 assertEquals("Friday, December 13, 1901, 20:45", formatDateRange(l, utc, t1901, t1901, flags)); 283 284 long t2038 = Integer.MAX_VALUE * 1000L; 285 assertEquals("Tuesday, January 19, 2038, 03:14", formatDateRange(l, utc, t2038, t2038, flags)); 286 287 long t2106 = (2L + Integer.MAX_VALUE + Integer.MAX_VALUE) * 1000L; 288 assertEquals("Sunday, February 7, 2106, 06:28", formatDateRange(l, utc, t2106, t2106, flags)); 289 } 290 291 // http://b/10209343 - for the current year, we should honor the FORMAT_SHOW_YEAR flags. 292 public void test10209343_when_this_year() { 293 // Construct a date in the current year (whenever the test happens to be run). 294 Locale l = Locale.US; 295 TimeZone utc = TimeZone.getTimeZone("UTC"); 296 Calendar c = Calendar.getInstance(utc); 297 c.set(Calendar.MONTH, Calendar.FEBRUARY); 298 c.set(Calendar.DAY_OF_MONTH, 10); 299 c.set(Calendar.HOUR_OF_DAY, 0); 300 long thisYear = c.getTimeInMillis(); 301 302 // You don't get the year if it's this year... 303 assertEquals("February 10", formatDateRange(l, utc, thisYear, thisYear, FORMAT_SHOW_DATE)); 304 305 // ...unless you explicitly ask for it. 306 assertEquals(String.format("February 10, %d", c.get(Calendar.YEAR)), 307 formatDateRange(l, utc, thisYear, thisYear, FORMAT_SHOW_DATE | FORMAT_SHOW_YEAR)); 308 309 // ...or it's not actually this year... 310 Calendar c2 = (Calendar) c.clone(); 311 c2.set(Calendar.YEAR, 1980); 312 long oldYear = c2.getTimeInMillis(); 313 assertEquals("February 10, 1980", formatDateRange(l, utc, oldYear, oldYear, FORMAT_SHOW_DATE)); 314 315 // (But you can disable that!) 316 assertEquals("February 10", formatDateRange(l, utc, oldYear, oldYear, FORMAT_SHOW_DATE | FORMAT_NO_YEAR)); 317 318 // ...or the start and end years aren't the same... 319 assertEquals(String.format("February 10, 1980 – February 10, %d", c.get(Calendar.YEAR)), 320 formatDateRange(l, utc, oldYear, thisYear, FORMAT_SHOW_DATE)); 321 322 // (And you can't avoid that --- icu4c steps in and overrides you.) 323 assertEquals(String.format("February 10, 1980 – February 10, %d", c.get(Calendar.YEAR)), 324 formatDateRange(l, utc, oldYear, thisYear, FORMAT_SHOW_DATE | FORMAT_NO_YEAR)); 325 } 326} 327