Java:解析和应用新模式后的日期更改

时间:2013-07-16 10:51:25

标签: java parsing date simpledateformat

我正在尝试将用户可读的时间字符串转换为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(+正确时间)。那是为什么?

3 个答案:

答案 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);