1 32 package net.sf.retrotranslator.runtime.format; 33 34 import java.text.*; 35 import java.util.*; 36 import net.sf.retrotranslator.tests.BaseTestCase; 37 38 41 public class DateTimeConversionTestCase extends BaseTestCase { 42 43 public void testFormat_Flags() throws Exception { 44 assertFormat(" null null", "%7tH %1tT", null, null); 45 assertDate(" 05", "%4tC", "0567-01-04"); 46 assertTime("00:07:08 ", "%-10tT", "00:07:08.093"); 47 assertTime(" 00:07:08", "%10tT", "00:07:08.093"); 48 assertFormatException(MissingFormatWidthException.class, "%-tT", "x"); 49 assertFormatException(MissingFormatWidthException.class, "%-tT", new Date()); 50 assertFormatException(FormatFlagsConversionMismatchException.class, "%#tT", new Date()); 51 assertFormatException(IllegalFormatPrecisionException.class, "%10.2tT", new Date()); 52 assertFormatException(IllegalFormatPrecisionException.class, "%#-10.1tT", "x"); 53 } 54 55 public void testFormat_Time() throws Exception { 56 assertTime("00", "%tH", "00:07:08.093"); 57 assertTime("14", "%tH", "14:15:45.178"); 58 59 assertTime("12", "%tI", "00:07:08.093"); 60 assertTime("02", "%tI", "14:15:45.178"); 61 62 assertTime("0", "%tk", "00:07:08.093"); 63 assertTime("14", "%tk", "14:15:45.178"); 64 65 assertTime("12", "%tl", "00:07:08.093"); 66 assertTime("2", "%tl", "14:15:45.178"); 67 68 assertTime("07", "%tM", "00:07:08.093"); 69 assertTime("15", "%tM", "14:15:45.178"); 70 71 assertTime("08", "%tS", "00:07:08.093"); 72 assertTime("45", "%tS", "14:15:45.178"); 73 74 assertTime("093", "%tL", "00:07:08.093"); 75 assertTime("178", "%tL", "14:15:45.178"); 76 77 assertTime("093000000", "%tN", "00:07:08.093"); 78 assertTime("178000000", "%tN", "14:15:45.178"); 79 80 assertTime("am", "%tp", "00:07:08.093"); 81 assertTime("pm", "%tp", "14:15:45.178"); 82 83 assertTime("AM", "%Tp", "00:07:08.093"); 84 assertTime("PM", "%Tp", "14:15:45.178"); 85 86 assertDateTime("1234567", "%ts", new Date(1234567890)); 87 assertDateTime("1234567890", "%tQ", new Date(1234567890)); 88 89 assertTime("00:07", "%tR", "00:07:08.093"); 90 assertTime("14:15", "%tR", "14:15:45.178"); 91 92 assertTime("00:07:08", "%tT", "00:07:08.093"); 93 assertTime("14:15:45", "%tT", "14:15:45.178"); 94 95 assertTime("12:07:08 AM", "%tr", "00:07:08.093"); 96 assertTime("02:15:45 PM", "%tr", "14:15:45.178"); 97 } 98 99 public void testFormat_Date() throws Exception { 100 assertPatternDate("MMMM", "%tB", "2006-01-03", false); 101 assertPatternDate("MMMM", "%tB", "2006-07-07", false); 102 103 assertDate("JANVIER", "%TB", "2006-01-03"); 104 assertDate("JUILLET", "%TB", "2006-07-07"); 105 106 assertPatternDate("MMM", "%tb", "2006-01-05", false); 107 assertPatternDate("MMM", "%tb", "2006-07-09", false); 108 109 assertPatternDate("MMM", "%Tb", "2006-01-05", true); 110 assertPatternDate("MMM", "%Tb", "2006-07-09", true); 111 112 assertPatternDate("MMM", "%th", "2006-04-05", false); 113 assertPatternDate("MMM", "%th", "2006-09-09", false); 114 115 assertPatternDate("MMM", "%Th", "2006-04-05", true); 116 assertPatternDate("MMM", "%Th", "2006-09-09", true); 117 118 assertPatternDate("EEEE", "%tA", "2006-01-03", false); 119 assertPatternDate("EEEE", "%tA", "2006-07-07", false); 120 121 assertDate("MARDI", "%TA", "2006-01-03"); 122 assertDate("VENDREDI", "%TA", "2006-07-07"); 123 124 assertPatternDate("EEE", "%ta", "2006-01-04", false); 125 assertPatternDate("EEE", "%ta", "2006-07-08", false); 126 127 assertPatternDate("EEE", "%Ta", "2006-01-04", true); 128 assertPatternDate("EEE", "%Ta", "2006-07-08", true); 129 130 assertDate("20", "%tC", "2006-01-04"); 131 assertDate("01", "%tC", "0123-01-04"); 132 assertDate("123", "%tC", "12345-07-08"); 133 134 assertDate("2006", "%tY", "2006-01-04"); 135 assertDate("0123", "%tY", "0123-01-04"); 136 assertDate("12345", "%tY", "12345-07-08"); 137 138 assertDate("06", "%ty", "2006-01-04"); 139 assertDate("03", "%ty", "0003-01-04"); 140 assertDate("45", "%ty", "12345-07-08"); 141 142 assertDate("004", "%tj", "2006-01-04"); 143 assertDate("076", "%tj", "0003-03-17"); 144 assertDate("366", "%tj", "2000-12-31"); 145 146 assertDate("01", "%tm", "2006-01-04"); 147 assertDate("03", "%tm", "0003-03-17"); 148 assertDate("12", "%tm", "2000-12-31"); 149 150 assertDate("04", "%td", "2006-01-04"); 151 assertDate("17", "%td", "0003-03-17"); 152 assertDate("31", "%td", "2000-12-31"); 153 154 assertDate("4", "%te", "2006-01-04"); 155 assertDate("17", "%te", "0003-03-17"); 156 assertDate("31", "%te", "2000-12-31"); 157 158 assertDate("11/12/04", "%tD", "0004-11-12"); 159 assertDate("01/03/06", "%tD", "2006-01-03"); 160 assertDate("07/08/05", "%tD", "12005-07-08"); 161 162 assertDate("0004-11-12", "%tF", "0004-11-12"); 163 assertDate("2006-01-03", "%tF", "2006-01-03"); 164 assertDate("12005-07-08", "%tF", "12005-07-08"); 165 } 166 167 public void testFormat_TimeZone() throws Exception { 168 TimeZone defaultTimeZone = TimeZone.getDefault(); 169 try { 170 assertTimeZone("Asia/Katmandu", "+0545", "NPT", "NPT"); 171 assertTimeZone("GMT+02:00", "+0200", "GMT+02:00", "GMT+02:00"); 172 assertTimeZone("Europe/Helsinki", "+0200", "EET", "EEST"); 173 assertTimeZone("Africa/Casablanca", "+0000", "WET", "WET"); 174 assertTimeZone("America/Los_Angeles", "-0800", "PST", "PDT"); 175 assertTimeZone("America/New_York", "-0500", "EST", "EDT"); 176 TimeZone.setDefault(TimeZone.getTimeZone("Europe/London")); 177 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 178 format.setTimeZone(TimeZone.getTimeZone("America/New_York")); 179 Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("America/Los_Angeles")); 180 calendar.setTime(format.parse("2006-05-08 02:25:45")); 181 assertFormat("2006-05-07 23:25:45", "%tF %tT", calendar, calendar); 182 } finally { 183 TimeZone.setDefault(defaultTimeZone); 184 } 185 } 186 187 private void assertTime(String expected, String format, String time) throws Exception { 188 assertDateTime(expected, format, parse("2006-01-03 " + time)); 189 } 190 191 private void assertDate(String expected, String format, String date) throws Exception { 192 assertDateTime(expected, format, parseDate(date)); 193 } 194 195 private void assertPatternDate(String pattern, String format, String date, boolean upperCase) throws Exception { 196 Date parsedDate = parseDate(date); 197 String expected = format(parsedDate, pattern); 198 if (upperCase) { 199 expected = expected.toUpperCase(); 200 } 201 assertDateTime(expected, format, parsedDate); 202 } 203 204 private void assertTimeZone(String id, String numeric, String standard, String daylight) throws Exception { 205 TimeZone.setDefault(TimeZone.getTimeZone(id)); 206 Date winter = parse("2006-01-03 00:07:08.093"); 207 Date summer = parse("2006-04-07 14:15:45.178"); 208 assertDateTime(numeric, "%tz", winter); 209 assertDateTime(numeric, "%tz", summer); 210 assertDateTime(standard, "%tZ", winter); 211 assertDateTime(daylight, "%tZ", summer); 212 assertDateTime(format(winter, "EEE MMM") + " 03 00:07:08 " + standard + " 2006", "%tc", winter); 213 assertDateTime(format(summer, "EEE MMM") + " 07 14:15:45 " + daylight + " 2006", "%tc", summer); 214 } 215 216 private void assertDateTime(String expected, String format, Date date) { 217 Calendar calendar = new GregorianCalendar(); 218 calendar.setTime(date); 219 for (Object argument : new Object []{date.getTime(), date, calendar}) { 220 assertFormat(expected, format, argument); 221 } 222 } 223 224 private static Date parseDate(String date) throws ParseException { 225 return parse(date + " 00:07:08.093"); 226 } 227 228 private static Date parse(String dateTime) throws ParseException { 229 return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").parse(dateTime); 230 } 231 232 private static String format(Date date, String pattern) { 233 return new SimpleDateFormat(pattern, Locale.FRANCE).format(date); 234 } 235 236 } | Popular Tags |