0

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

4

3 回答 3

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 年1997 日历年。但是,如果 getFirstDayOfWeek() 是 SUNDAY,则 1998 年的第 1 周从 1998 年 1 月 4 日开始,到 1998 年 1 月 10 日结束;1998 年的前三天是 1997 年第 53 周的一部分,他们的周年是 1997 年。

您想同时使用yyyy这两种格式。

于 2013-07-16T10:59:25.753 回答
2

您的问题是您使用第二种格式yyyy而不是YYYY.

于 2013-07-16T11:03:38.217 回答
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);
于 2013-07-16T11:12:49.577 回答