我正在尝试将用户可读的时间字符串转换为SQL兼容的字符串。因此,我使用以下代码:
// User Date
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.YYYY - HH:mm:ss");
String dateTimeUI = sdf.format(new Date());
System.out.println("UI: " + dateTimeUI);
labelDatumZeit.setText(dateTimeUI);
System.out.println("[UI]: " + dateTimeUI);
// SQL-Date
SimpleDateFormat sdf2 = new SimpleDateFormat("dd.MM.YYYY - HH:mm:ss");
Date d = sdf2.parse(dateTimeUI);
sdf2.applyPattern("yyyy-MM-dd HH:mm:ss");
dateTimeSQL = sdf2.format(d);
System.out.println("[SQL]: " + dateTimeSQL);
转换为新格式后,我的数据始终为2012-12-31(+正确时间)。那是为什么?
答案 0 :(得分:3)
YYYY
是一周。 yyyy
是一年。如果你认为两者都是同一个东西,那就是问题所在。
来自javadoc:
周年与WEEK_OF_YEAR周期同步。第一周和最后一周(包括)之间的所有周都具有相同的周年值。因此,一周中的第一天和最后一天可能具有不同的日历年值。
例如,1998年1月1日是星期四。如果getFirstDayOfWeek()是MONDAY并且getMinimalDaysInFirstWeek()是4(ISO 8601标准兼容设置),那么1998年第1周将于1997年12月29日开始,并于1998年1月4日结束。过去三天的一周是1998年但是,如果getFirstDayOfWeek()是SUNDAY,则1998年第1周从1998年1月4日开始,到1998年1月10日结束; 1998年的前三天是1997年第53周的一部分,其一周是1997年。
您希望以两种格式使用yyyy
。
答案 1 :(得分:2)
您的问题是,在第二种格式中,您使用的是yyyy
而不是YYYY
。
答案 2 :(得分:0)
Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.YYYY - HH:mm:ss"); String dateTimeUI = sdf.format(date); System.out.println("UI: " + dateTimeUI); // SQL-Date Calendar calendar = sdf.getCalendar(); calendar.setTime(date); System.out.println(calendar.getTime()); sdf.applyPattern("YYYY-MM-dd HH:mm:ss"); String dateTimeSQL = sdf.format(calendar.getTime()); System.out.println("[SQL]: " + dateTimeSQL);