0

如果我想格式化一个包含日期的字符串,以便我可以在BETWEEN我的 mysql 查询部分中使用它,我该怎么做呢?

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

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

    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 必须使用两次。一次将 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 localeto English,否则它将使用default可能不是英语的平台语言环境。

于 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 回答