1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
| /** * @author duiliu * 2019/3/18 */ public class DateDemo { // 测试 public static void main(final String[] args) { final Date date = new Date(2019, 2, 12, 11, 03, 56); final DateFomatter dateFomatter1 = new DateFomatter("yyyy\\u00ADMM\\u00ADddTHH:mm:ss"); System.out.println("1\t" + dateFomatter1.format(date) );
final DateFomatter dateFomatter2 = new DateFomatter("yy\\u00ADM\\u00ADd // H:m:s"); System.out.println("2\t" + dateFomatter2.format(date) );
final DateFomatter dateFomatter3 = new DateFomatter("d/m/yyyy"); System.out.println("3\t" + dateFomatter3.format(date) );
final DateFomatter dateFomatter4 = new DateFomatter("hh:mm:ss"); System.out.println("4\t" + dateFomatter4.format(date) );
final DateFomatter dateFomatter5 = new DateFomatter( "yyyy\u00ADMM\u00ADdd,yy\u00ADM\u00ADd"); System.out.println("5\t" + dateFomatter5.format(date) );
final DateFomatter dateFomatter6 = new DateFomatter( "hxmxs"); System.out.println("6\t" + dateFomatter6.format(date) ); } }
// 题目给出的时间数据结构 class Date { public int Year; public int Month; public int Day; public int Hour; public int Minute; public int Second;
public Date(final int year, final int month, final int day, final int hour, final int minute, final int second) { Year = year; Month = month; Day = day; Hour = hour; Minute = minute; Second = second; } }
// 时间格式化类 class DateFomatter { private final String formatStr; static final Exception InvalidException = new Exception("invalid format");
public DateFomatter(final String format) { this.formatStr = format; }
public String format(final Date date) { char ch = ' '; int i = 0, j = 1; final StringBuilder sb = new StringBuilder(); try { while (i++ < formatStr.length()) { j = 1; while (i < formatStr.length() && (ch = formatStr.charAt(i)) == formatStr.charAt( i - 1)) { i++; j++; } sb.append(formatDate(formatStr.charAt(i - 1), j, date)); } } catch (final Exception e) { return e.getMessage(); } return sb.toString(); }
private String formatDate(final char ch, final int length, final Date date) throws Exception { switch (ch) { case 'y': return formatTwoOrFour(length, date.Year); case 'M': return formatOneOrTwo(length, date.Month); case 'd': return formatOneOrTwo(length, date.Day); case 'H': return formatOneOrTwo(length == 1 && date.Hour > 10 ? 2 : length, date.Hour); case 'h': return formatOneOrTwo(length == 1 && date.Hour > 10 ? 2 : length, date.Hour % 12); case 'm': return formatOneOrTwo(length == 1 && date.Minute > 10 ? 2 : length, date.Minute); case 's': return formatOneOrTwo(length == 1 && date.Second > 10 ? 2 : length, date.Second); default: return ch + ""; } }
private String intToString(final int needLength, final int number) { int length = 0; int temp = number; final StringBuilder sb = new StringBuilder(); while (temp > 0 && length++ < needLength) { sb.append(temp % 10); temp /= 10; } while (length++ < needLength) { sb.append(0); } return sb.reverse().toString(); }
private String formatOne(final int number) { return intToString(1, number); }
private String formatTwo(final int number) { return intToString(2, number); }
private String formatFour(final int number) { return intToString(4, number); }
private String formatOneOrTwo(final int length, final int number) throws Exception { if (length == 1) { return formatOne(number); } else if (length == 2) { return formatTwo(number); } throw InvalidException; }
private String formatTwoOrFour(final int length, final int number) throws Exception { if (length == 2) { return formatTwo(number); } else if (length == 4) { return formatFour(number); } throw InvalidException; }
}
|