2

私のプログラムでは、日付を文字列から指定された形式に変換してから日付に戻そうとしています。日付を dd-MMM-yy 形式にする必要があります。だから、SimpleDateFormatのように、日付をdd-MMM-yy形式に変換しています。

SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yy");
String bookingDate = sdf.format(myDate);

結果は私が期待したもので、2012 年 5 月 23 日ですが、parse() を使用して文字列を日付に戻すと、Wed May 23 13:16:14 IST 2012 に変わります。

フォーマットを変更せずに文字列を日付に戻す方法はありますか? 指定された形式の日付オブジェクトをクエリに渡す必要があります。

4

5 に答える 5

4

parse() を使用して文字列を日付に戻すと、Wed May 23 13:16:14 IST 2012 に変更されます。

それは正しくありませDateん. 正しく変換されます. Date インスタンスを印刷しようとすると, toString() メソッドが呼び出され, フォーマットされた出力が固定されているため, フォーマットされた日付が必要な場合はformat()メソッドを使用する必要があります.

要するに、 parse メソッドはを解析して、Stringフォーマットを保持するDateプロパティがないため、とにかくメソッドDateを使用する必要がありますformat()

于 2012-05-24T05:18:51.237 に答える
0

日付オブジェクトを厳密に渡す必要がある場合は、日付オブジェクトが Java、Java フレームワーク、または SQL のいずれかの形式を理解しているため、その形式について心配する必要はありません。

また、SQLクエリで日付を直接渡す(連結する)場合は、DBで表示されるのと同じ形式で日付文字列を渡すことができ、同じように正しく処理されます。

于 2012-05-24T06:49:28.487 に答える
0

使用できますDateFormat.getDateInstance(DateFormat.SHORT, <locale>).parse(myDate);

ただし、カスタムではなく、dd/MM/yy などの標準形式の日付が表示されます。テンプレートは、使用するロケールによって異なります。

標準 Java ライブラリまたはThreeTen/JSR-310を使用して、独自のパターンを構築してみてください。

于 2012-05-29T10:59:52.277 に答える
0

クエリ文字列に日付を追加するだけの場合、クエリで日付オブジェクトをどのように渡していますか?なぜ文字列の日付を日付オブジェクトに戻す必要があるのですか? また、準備済みステートメントを使用している場合は、フォーマットについて心配する必要はありません。上記で提案したように、Date オブジェクトはフォーマット情報を保持しません

于 2012-05-24T05:41:50.870 に答える
0

現在、この作業を行うためのより現代的な方法があります。

java.time

java.timeフレームワークは、Java 8 以降にバンドルされていますチュートリアルを参照してください。これらの新しいクラスは、 JSR 310で定義された Joda- Timeに触発され、 ThreeTen-Extraプロジェクトによって拡張されています。これらは、厄介で紛らわしい古いクラスである java.util.Date/.Calendar などを大幅に改善したものです。

デート限定クラス

新しいフレームワークは、LocalDate時間帯やタイム ゾーンのない日付のみを表すクラスを提供します。

ところで、年に 2 桁を使用すると問題が発生します。可能な限り 4 桁の年を使用することを強くお勧めします。java.time フレームワークは、任意の 2 桁の年が20xx2000 年から 2099 年までの世紀にあると想定します。

文字列を解析するには、予期される形式を指定します。標準のISO 8601形式を使用していないため、形式パターンを定義する必要があります。name-of-month に期待される言語を含む Locale を指定します。

// Parse String representation.
String input = "23-May-12";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "d-MMMM-yy" , Locale.ENGLISH );  // Using four "M" characters means we expect the full name of the month.
LocalDate localDate = formatter.parse ( input , LocalDate :: from );

逆に、日付値の文字列表現を生成するには、同じフォーマッタを再利用できます。

    // Generate String representation.
    String output = localDate.format ( formatter );

コンソールにダンプします。

    System.out.println ( "input: " + input + " → localDate : " + localDate );
    System.out.println ( "localDate : " + localDate + " → output: " + output );

走るとき。

入力: 23-May-12 → localDate: 2012-05-23

localDate : 2012-05-23 → 出力: 23-May-12

于 2015-10-11T02:08:39.837 に答える