Разница в Java для currentTimeMillis () Функция и специальная дата - MySQL? - PullRequest
0 голосов
/ 06 августа 2011

У меня есть 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 () вычисляет currentTimeMillis, который прошел с 1 января 1970 года, и мне нужно вычислить то же самое с моими данными.Я написал следующий код с тем же кодом, который использовал ранее для хранения данных 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 Ответ

1 голос
/ 06 августа 2011

Использовать заданный метод Календаря:

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

и т.д.

А затем извлеките количество миллисекунд с помощью c.getTime().getTime().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...