格式化在mysql BETWEEN语句中使用的日期?

时间:2013-09-17 05:53:41

标签: java

如果我想格式化一个包含日期的字符串,以便我可以在我的mysql查询的BETWEEN部分中使用它,我将如何进行此操作?

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 个答案:

答案 0 :(得分:2)

您应该使用PreparedStatement代替,例如:

    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

答案 1 :(得分: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));

这将生成正确的格式。

答案 2 :(得分:1)

temp.toString()是Date对象的默认toString()方法,它不会以您期望的格式打印。

在你的情况下,SimpleDateFormat必须使用两次。一旦将String中的Date转换为要转换为java.util.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 localeEnglish,否则它将使用可能不是英语的平台default区域设置。< / em>的

答案 3 :(得分: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";