currentTimeMillis()函数和特殊日期的Java差异 - MySQL?

时间:2011-08-06 15:30:38

标签: java mysql datetime

我在数据库中有这样的50000条XML记录:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<urlMD5>11ca7070ad6eb3180c53281e7b597976</urlMD5>
<date>
<year>2011</year>
<month>8</month>
<day>6</day>
<h>19</h>
<m>26</m>
<s>40</s>
</date>
<enc>utf-8</enc>
</root>

如您所见,我以分隔格式保存了日期。 现在我需要提取当前的currentTimeMillis()并在新字段中保存到数据库。 因此,我可以轻松地将它们与当前的currentTimeMillis()进行比较,并找出最近两天存储的文档。 例如:

int ct = currentTimeMillis();

Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/crawler?" + "user=root&password=&useUnicode=true&characterEncoding=UTF-8");
Statement stat = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM DBName WHERE ct - 60 * 60 * 24 * 2 > timeField");

因为我想多次使用这个字段,我想使用一个简单的查询,我不想每次都提取XML格式。

问题是currentTimeMillis()函数计算从1970年1月1日开始传递的currentTimeMillis,我需要用我的数据计算相同的东西。 我编写了以下代码,其代码与之前用于存储XML数据的代码相同,以确保我是否可以执行此操作:

int s = 0;
s += (Calendar.getInstance().get(Calendar.YEAR) - 1970) * 60 * 60 * 24 * 365;
s += (Calendar.getInstance().get(Calendar.MONTH)) * 60 * 60 * 24 * 31;
s += (Calendar.getInstance().get(Calendar.DAY_OF_MONTH) * 60 * 60 * 24);
s += (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) * 60 * 60);
s += (Calendar.getInstance().get(Calendar.MINUTE) * 60);
s += (Calendar.getInstance().get(Calendar.SECOND));
System.out.println(s);
System.out.println(System.currentTimeMillis() / 1000);

但结果不一样:

1312313680
1312643080

其中一个原因是因为不是每个月都有31天。

无论如何,我需要帮助才能找出如何用特殊日期计算currentTimeMillis,而不是当前日期?

我应该提一下我使用的是mysql,所以也许我可以用特殊的格式保存日期,我可以将它与SQL查询进行比较?

1 个答案:

答案 0 :(得分:1)

使用日历的设置方法:

Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);

然后使用c.getTime().getTime()提取毫秒数。