0

BETWEENMySQLクエリのセクションで使用できるように、日付を含む文字列をフォーマットしたい場合、どうすればよいですか?

String str = "Tue Sep 17 01:48:10 EDT 2013" // this string is passed into my function in this format.

String select = "SELECT id, consumption, date_time FROM consumption_info WHERE date_time BETWEEN '2013-09-15 00:00:00' AND '2013-09-17 00:00:00' GROUP BY id";

問題は、 str をそのまま使用できないことです-正しい方法でフォーマットされていません。私は使用できると思いました:

Date temp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(str );

String finalDate = temp.toString()-しかし、これでも私が望むものは返されません...

何か案は?

4

4 に答える 4

2

PreparedStatement代わりにa を使用する必要があります。

    Date d1 = ...;
    Date d2 = ...;
    PreparedStatement ps = con.prepareStatement("SELECT id, consumption, date_time " 
        + "FROM consumption_info WHERE date_time BETWEEN ? AND ? GROUP BY id");
    ps.setDate(1, d1);
    ps.setDate(2, d2);
    ResultSet rs = ps.executeQuery();

この場合、d1d2は 型であることに注意してくださいjava.sql.Date

于 2013-09-17T05:59:39.753 に答える
2

最初に日付を解析する必要があります

String str = "Tue Sep 17 01:48:10 EDT 2013"

お気に入り

Date temp = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy").parse(str );

そして、この日付オブジェクトを使用します

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
sdf.format(new Date(temp));

これにより、正しい形式が生成されます。

于 2013-09-17T06:00:05.143 に答える
1

temp.toString()は Date オブジェクトのデフォルトtoString()の方法であり、期待する形式で印刷されません。

あなたの場合、SimpleDateFormat は 2 回使用する必要があります。java.util.Date オブジェクトに変換する String 内の Date を一度変換します。次に、日付を SQL で期待される形式で文字列に変換する必要があります。以下のように達成できます。

String str = "Tue Sep 17 01:48:10 EDT 2013";

SimpleDateFormat sdf1 = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

// String to date
Date tempDate = sdf1.parse(str);
// Date to required format in String
String tempStr = sdf2.format(tempDate);

System.out.println(tempStr);

注:最初の解析でSimpleDateFormat localeto を明示的に指定してください。そうしないと、英語ではない可能性があるプラットフォーム ロケールが使用されます。Englishdefault

于 2013-09-17T06:07:01.970 に答える
0

日付文字列を解析/フォーマットするときは、タイムゾーンを指定する必要があります。このコードを見てください。

String str = "Tue Sep 17 01:48:10 IST 2013" ;
SimpleDateFormat sdf=new SimpleDateFormat("EEE MMM d hh:mm:ss zzz yyyy");
TimeZone tz = TimeZone.getTimeZone("Asia/Calcutta"); // for example, use your own
sdf.setTimeZone(tz);
Date date = sdf.parse(str);
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd 00:00:00");
sdf1.setTimeZone(tz);
String dateStr = sdf1.format(date);
String qryStr = "SELECT id, consumption, date_time FROM consumption_info 
     WHERE date_time BETWEEN '2013-09-15 00:00:00' AND '"+dateStr+"' GROUP BY id";
于 2013-09-17T06:15:13.870 に答える