我们的一个客户希望能够输入年份中只有2位数字的日期.日期将在过去,所以如果2位数年份在今年之后,我们希望它在上个世纪工作,但如果2位数年份等于或小于当年,则在当前世纪工作.
截至今天10/30/2008
01/01/01 = 01/01/2001
01/01/09 = 01/01/1909
这是一个奇怪的要求,我解决了这个问题,我只是不喜欢我的解决方案.
感觉好像有更好的方式来做到这一点.
谢谢您的帮助.
public static String stupidDate(String dateString) { String twoDigitYear = StringUtils.right(dateString,2); String newDate = StringUtils.left(dateString,dateString.length() - 2); int year = NumberUtils.toInt(twoDigitYear); Calendar c = GregorianCalendar.getInstance(); int centuryInt = c.get(Calendar.YEAR) - year; newDate = newDate + StringUtils.left(Integer.toString(centuryInt),2) + twoDigitYear; return newDate; }
解决方法
Groovy脚本(容易扔入java)演示了关于SimpleDateFormat的@bobince点.
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat('MM/dd/yy') java.text.SimpleDateFormat fmt = new java.text.SimpleDateFormat('yyyy-MM-dd') Calendar cal = Calendar.getInstance() cal.add(Calendar.YEAR,-100) sdf.set2DigitYearStart(cal.getTime()) dates = ['01/01/01','10/30/08','01/01/09'] dates.each {String d -> println fmt.format(sdf.parse(d)) }
Yeilds
2001-01-01 2008-10-30 1909-01-01