public static String formatDateRange(long startMs, long endMs, int flags, String olsonId) { if ((flags & FORMAT_UTC) != 0) { olsonId = "UTC"; } TimeZone tz = (olsonId != null) ? TimeZone.getTimeZone(olsonId) : TimeZone.getDefault(); return formatDateRange(Locale.getDefault(), tz, startMs, endMs, flags); }
private static long getFormatter(String skeleton, String localeName, String tzName) { String key = skeleton + "\t" + localeName + "\t" + tzName; Long formatter = CACHED_FORMATTERS.get(key); if (formatter != null) { return formatter; } long address = createDateIntervalFormat(skeleton, localeName, tzName); CACHED_FORMATTERS.put(key, address); return address; }
if (!(onTheHour(startCalendar) && onTheHour(endCalendar))) { timePart = timePart + "m"; if (fallOnDifferentDates(startCalendar, endCalendar)) { flags |= FORMAT_SHOW_DATE; if (fallInSameMonth(startCalendar, endCalendar) && (flags & FORMAT_NO_MONTH_DAY) != 0) { flags &= (~FORMAT_SHOW_WEEKDAY); flags &= (~FORMAT_SHOW_TIME); } else if (!fallInSameYear(startCalendar, endCalendar) || !isThisYear(startCalendar)) { flags |= FORMAT_SHOW_YEAR;
public static String formatDateRange(Locale locale, TimeZone tz, long startMs, long endMs, int flags) { Calendar startCalendar = Calendar.getInstance(tz); startCalendar.setTimeInMillis(startMs); Calendar endCalendar; if (startMs == endMs) { endCalendar = startCalendar; } else { endCalendar = Calendar.getInstance(tz); endCalendar.setTimeInMillis(endMs); } boolean endsAtMidnight = isMidnight(endCalendar); // If we're not showing the time or the start and end times are on the same day, and the // end time is midnight, fudge the end date so we don't count the day that's about to start. // This is not the behavior of icu4c's DateIntervalFormat, but it's the historical behavior // of Android's DateUtils.formatDateRange. if (startMs != endMs && endsAtMidnight && ((flags & FORMAT_SHOW_TIME) == 0 || julianDay(startCalendar) == julianDay(endCalendar))) { endCalendar.roll(Calendar.DAY_OF_MONTH, false); endMs -= DAY_IN_MS; } String skeleton = toSkeleton(startCalendar, endCalendar, flags); synchronized (CACHED_FORMATTERS) { return formatDateInterval(getFormatter(skeleton, locale.toString(), tz.getID()), startMs, endMs); } }
public static String formatDateRange(Locale locale, TimeZone tz, long startMs, long endMs, int flags) { Calendar startCalendar = Calendar.getInstance(tz); startCalendar.setTimeInMillis(startMs); Calendar endCalendar; if (startMs == endMs) { endCalendar = startCalendar; } else { endCalendar = Calendar.getInstance(tz); endCalendar.setTimeInMillis(endMs); } boolean endsAtMidnight = isMidnight(endCalendar); // If we're not showing the time or the start and end times are on the same day, and the // end time is midnight, fudge the end date so we don't count the day that's about to start. // This is not the behavior of icu4c's DateIntervalFormat, but it's the historical behavior // of Android's DateUtils.formatDateRange. if (startMs != endMs && endsAtMidnight && ((flags & FORMAT_SHOW_TIME) == 0 || julianDay(startCalendar) == julianDay(endCalendar))) { endCalendar.roll(Calendar.DAY_OF_MONTH, false); endMs -= DAY_IN_MS; } String skeleton = toSkeleton(startCalendar, endCalendar, flags); synchronized (CACHED_FORMATTERS) { return formatDateInterval(getFormatter(skeleton, locale.toString(), tz.getID()), startMs, endMs); } }
public static String formatDateRange(Locale locale, TimeZone tz, long startMs, long endMs, int flags) { Calendar startCalendar = Calendar.getInstance(tz); startCalendar.setTimeInMillis(startMs); Calendar endCalendar; if (startMs == endMs) { endCalendar = startCalendar; } else { endCalendar = Calendar.getInstance(tz); endCalendar.setTimeInMillis(endMs); } boolean endsAtMidnight = isMidnight(endCalendar); // If we're not showing the time or the start and end times are on the same day, and the // end time is midnight, fudge the end date so we don't count the day that's about to start. // This is not the behavior of icu4c's DateIntervalFormat, but it's the historical behavior // of Android's DateUtils.formatDateRange. if (startMs != endMs && endsAtMidnight && ((flags & FORMAT_SHOW_TIME) == 0 || julianDay(startCalendar) == julianDay(endCalendar))) { endCalendar.roll(Calendar.DAY_OF_MONTH, false); endMs -= DAY_IN_MS; } String skeleton = toSkeleton(startCalendar, endCalendar, flags); synchronized (CACHED_FORMATTERS) { return formatDateInterval(getFormatter(skeleton, locale.toString(), tz.getID()), startMs, endMs); } }
if (!(onTheHour(startCalendar) && onTheHour(endCalendar))) { timePart = timePart + "m"; if (fallOnDifferentDates(startCalendar, endCalendar)) { flags |= FORMAT_SHOW_DATE; if (fallInSameMonth(startCalendar, endCalendar) && (flags & FORMAT_NO_MONTH_DAY) != 0) { flags &= (~FORMAT_SHOW_WEEKDAY); flags &= (~FORMAT_SHOW_TIME); } else if (!fallInSameYear(startCalendar, endCalendar) || !isThisYear(startCalendar)) { flags |= FORMAT_SHOW_YEAR;
@Test public void testDateInterval_FormatDateRange() throws ParseException { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, 2013); calendar.set(Calendar.MONTH, Calendar.JANUARY); calendar.set(Calendar.DAY_OF_MONTH, 20); long timeInMillis = calendar.getTimeInMillis(); String actual = DateIntervalFormat.formatDateRange(ULocale.getDefault(), TimeZone.getDefault(), timeInMillis, timeInMillis, DateUtils.FORMAT_NUMERIC_DATE); DateFormat format = new SimpleDateFormat("MM/dd/yyyy", ULocale.getDefault()); Date date = format.parse(actual); assertThat(date).isNotNull(); } }
private static long getFormatter(String skeleton, String localeName, String tzName) { String key = skeleton + "\t" + localeName + "\t" + tzName; Long formatter = CACHED_FORMATTERS.get(key); if (formatter != null) { return formatter; } long address = createDateIntervalFormat(skeleton, localeName, tzName); CACHED_FORMATTERS.put(key, address); return address; }
public static String formatDateRange(Locale locale, TimeZone tz, long startMs, long endMs, int flags) { Calendar startCalendar = Calendar.getInstance(tz); startCalendar.setTimeInMillis(startMs); Calendar endCalendar; if (startMs == endMs) { endCalendar = startCalendar; } else { endCalendar = Calendar.getInstance(tz); endCalendar.setTimeInMillis(endMs); } boolean endsAtMidnight = isMidnight(endCalendar); // If we're not showing the time or the start and end times are on the same day, and the // end time is midnight, fudge the end date so we don't count the day that's about to start. // This is not the behavior of icu4c's DateIntervalFormat, but it's the historical behavior // of Android's DateUtils.formatDateRange. if (startMs != endMs && endsAtMidnight && ((flags & FORMAT_SHOW_TIME) == 0 || julianDay(startCalendar) == julianDay(endCalendar))) { endCalendar.roll(Calendar.DAY_OF_MONTH, false); endMs -= DAY_IN_MS; } String skeleton = toSkeleton(startCalendar, endCalendar, flags); synchronized (CACHED_FORMATTERS) { return formatDateInterval(getFormatter(skeleton, locale.toString(), tz.getID()), startMs, endMs); } }
if (!(onTheHour(startCalendar) && onTheHour(endCalendar))) { timePart = timePart + "m"; if (fallOnDifferentDates(startCalendar, endCalendar)) { flags |= FORMAT_SHOW_DATE; if (fallInSameMonth(startCalendar, endCalendar) && (flags & FORMAT_NO_MONTH_DAY) != 0) { flags &= (~FORMAT_SHOW_WEEKDAY); flags &= (~FORMAT_SHOW_TIME); } else if (!fallInSameYear(startCalendar, endCalendar) || !isThisYear(startCalendar)) { flags |= FORMAT_SHOW_YEAR;
public static String formatDateRange(long startMs, long endMs, int flags, String olsonId) { if ((flags & FORMAT_UTC) != 0) { olsonId = "UTC"; } TimeZone tz = (olsonId != null) ? TimeZone.getTimeZone(olsonId) : TimeZone.getDefault(); return formatDateRange(Locale.getDefault(), tz, startMs, endMs, flags); }
private static long getFormatter(String skeleton, String localeName, String tzName) { String key = skeleton + "\t" + localeName + "\t" + tzName; Long formatter = CACHED_FORMATTERS.get(key); if (formatter != null) { return formatter; } long address = createDateIntervalFormat(skeleton, localeName, tzName); CACHED_FORMATTERS.put(key, address); return address; }
public static String formatDateRange(Locale locale, TimeZone tz, long startMs, long endMs, int flags) { Calendar startCalendar = Calendar.getInstance(tz); startCalendar.setTimeInMillis(startMs); Calendar endCalendar; if (startMs == endMs) { endCalendar = startCalendar; } else { endCalendar = Calendar.getInstance(tz); endCalendar.setTimeInMillis(endMs); } boolean endsAtMidnight = isMidnight(endCalendar); // If we're not showing the time or the start and end times are on the same day, and the // end time is midnight, fudge the end date so we don't count the day that's about to start. // This is not the behavior of icu4c's DateIntervalFormat, but it's the historical behavior // of Android's DateUtils.formatDateRange. if (startMs != endMs && endsAtMidnight && ((flags & FORMAT_SHOW_TIME) == 0 || julianDay(startCalendar) == julianDay(endCalendar))) { endCalendar.roll(Calendar.DAY_OF_MONTH, false); endMs -= DAY_IN_MS; } String skeleton = toSkeleton(startCalendar, endCalendar, flags); synchronized (CACHED_FORMATTERS) { return formatDateInterval(getFormatter(skeleton, locale.toString(), tz.getID()), startMs, endMs); } }
if (!(onTheHour(startCalendar) && onTheHour(endCalendar))) { timePart = timePart + "m"; if (fallOnDifferentDates(startCalendar, endCalendar)) { flags |= FORMAT_SHOW_DATE; if (fallInSameMonth(startCalendar, endCalendar) && (flags & FORMAT_NO_MONTH_DAY) != 0) { flags &= (~FORMAT_SHOW_WEEKDAY); flags &= (~FORMAT_SHOW_TIME); } else if (!fallInSameYear(startCalendar, endCalendar) || !isThisYear(startCalendar)) { flags |= FORMAT_SHOW_YEAR;
public static String formatDateRange(long startMs, long endMs, int flags, String olsonId) { if ((flags & FORMAT_UTC) != 0) { olsonId = "UTC"; } TimeZone tz = (olsonId != null) ? TimeZone.getTimeZone(olsonId) : TimeZone.getDefault(); return formatDateRange(Locale.getDefault(), tz, startMs, endMs, flags); }
private static long getFormatter(String skeleton, String localeName, String tzName) { String key = skeleton + "\t" + localeName + "\t" + tzName; Long formatter = CACHED_FORMATTERS.get(key); if (formatter != null) { return formatter; } long address = createDateIntervalFormat(skeleton, localeName, tzName); CACHED_FORMATTERS.put(key, address); return address; }
public static String formatDateRange(Locale locale, TimeZone tz, long startMs, long endMs, int flags) { Calendar startCalendar = Calendar.getInstance(tz); startCalendar.setTimeInMillis(startMs); Calendar endCalendar; if (startMs == endMs) { endCalendar = startCalendar; } else { endCalendar = Calendar.getInstance(tz); endCalendar.setTimeInMillis(endMs); } boolean endsAtMidnight = isMidnight(endCalendar); // If we're not showing the time or the start and end times are on the same day, and the // end time is midnight, fudge the end date so we don't count the day that's about to start. // This is not the behavior of icu4c's DateIntervalFormat, but it's the historical behavior // of Android's DateUtils.formatDateRange. if (startMs != endMs && endsAtMidnight && ((flags & FORMAT_SHOW_TIME) == 0 || julianDay(startCalendar) == julianDay(endCalendar))) { endCalendar.roll(Calendar.DAY_OF_MONTH, false); endMs -= DAY_IN_MS; } String skeleton = toSkeleton(startCalendar, endCalendar, flags); synchronized (CACHED_FORMATTERS) { return formatDateInterval(getFormatter(skeleton, locale.toString(), tz.getID()), startMs, endMs); } }
if (!(onTheHour(startCalendar) && onTheHour(endCalendar))) { timePart = timePart + "m"; if (fallOnDifferentDates(startCalendar, endCalendar)) { flags |= FORMAT_SHOW_DATE; if (fallInSameMonth(startCalendar, endCalendar) && (flags & FORMAT_NO_MONTH_DAY) != 0) { flags &= (~FORMAT_SHOW_WEEKDAY); flags &= (~FORMAT_SHOW_TIME); } else if (!fallInSameYear(startCalendar, endCalendar) || !isThisYear(startCalendar)) { flags |= FORMAT_SHOW_YEAR;
public static String formatDateRange(long startMs, long endMs, int flags, String olsonId) { if ((flags & FORMAT_UTC) != 0) { olsonId = "UTC"; } TimeZone tz = (olsonId != null) ? TimeZone.getTimeZone(olsonId) : TimeZone.getDefault(); return formatDateRange(Locale.getDefault(), tz, startMs, endMs, flags); }