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から:

1 週間の年は、WEEK_OF_YEAR サイクルと同期しています。最初の週と最後の週 (両端を含む) の間のすべての週は、同じ週の年の値を持ちます。したがって、週の最初の日と最後の日は、暦年の値が異なる場合があります。

たとえば、1998 年 1 月 1 日は木曜日です。getFirstDayOfWeek() が MONDAY で getMinimalDaysInFirstWeek() が 4 (ISO 8601 標準互換設定) の場合、1998 年の第 1 週は 1997 年 12 月 29 日に始まり、1998 年 1 月 4 日に終わります。最後の 3 日間の週の年は 1998 です。ただし、getFirstDayOfWeek() が SUNDAY の場合、1998 年の第 1 週は 1998 年 1 月 4 日に始まり、1998 年 1 月 10 日に終わります。1998 年の最初の 3 日間は 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 に答える