Преобразование метки времени в дату в Java
Это моя база данных:
Здесь я должен проверить информацию о текущей дате + статус =Q и получить значение счетчика.
Это мой код:
public class TodayQ {
public int data() {
int count=0;
Date date = new Date(timestamp);
DateFormat dateFormat = new SimpleDateFormat ("yyyy-MM-dd");
System.out.println( dateFormat.format (date));
// count++;
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/pro", "root", "");
PreparedStatement statement = con
.prepareStatement("select * from orders where status='Q' AND date=CURDATE()");
ResultSet result = statement.executeQuery();
while (result.next()) {
// Do something with the row returned.
count++; // if the first col is a count.
}
}
catch (Exception exc) {
System.out.println(exc.getMessage());
}
return count;
}
}
Здесь я должен отредактировать дату в формате (гггг-мм-дд). Теперь я получил выход. Но я хочу использовать метку времени в моей базе данных. Так как же конвертировать метку времени в дату в Java. Как использовать этот код в моем коде?
6 ответов
Вы можете добиться того же, используя функции MySQL. Надеюсь, что следующий запрос даст вам желаемый результат.
select *
from orders
where status='Q' AND
date_format(from_unixtime(date),'%Y-%m-%d') = current_date;
Date date = new Date(timestamp);
тогда как отметка времени является длинной переменной
Похоже, что целочисленное значение, которое вы видите - это количество секунд UNIX с начала эпохи (то есть 1970-01-01T00: 00: 00Z) -> http://en.wikipedia.org/wiki/Unix_epoch
Я не знаю, будет ли драйвер mysql JDBC позаботиться о преобразовании этого поля для вас. Если это так, предпочтительный способ получить его значение:
java.sql.Timestamp ts = result.getTimestamp( columnNumber );
Временная метка расширяет java.util.Date, поэтому вы можете использовать ее там, где ожидается обычная java.util.Date.
Если по какой-либо причине это не дает желаемого результата, тогда получите значение столбца как long
и установите значение в миллисекундах. Вам повезло, потому что эпохи Java и UNIX начинаются одновременно ( Java более точен).
long ts = result.getLong( columnNumber ) * 1000L;
java.util.Date date = new java.util.Date( ts );
Предполагая, что отметка времени - это время в миллисисах, вы можете использовать java.util.Calendar для преобразования отметки времени в дату следующим образом:
java.util.Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(timestamp);
java.util.Date date = cal.getTime();
Чтобы распечатать метку времени в гггг-мм-дд:
Date date = new Date(timestamp);
DateFormat dateFormat = new SimpleDateFormat ("yyyy-MM-dd");
System.out.println( dateFormat.format (date));
ОБНОВИТЬ
Вот подсказка о том, как вы можете продолжить:
public static int data() {
int count = 0;
Date now = Calendar.getInstance().getTime();
System.out.println("TODAY IS:"+now.getTime()); //TODAY IS:1344007864862
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
PreparedStatement statement1 = (PreparedStatement) con.prepareStatement("SELECT * FROM ORDERS WHERE STATUS = 'Q' AND DT= "+now.getTime());
ResultSet rs1 = statement1.executeQuery();
while (rs1 .next()) {
count++; //A HIT IS FOUND
}
} catch (Exception exc) {
System.out.println(exc.getMessage());
}
return count;
}
Очевидно, что now.getTime() возвращает фактическую миллисекунду, в которую дата была зафиксирована в переменной now. Математика полностью зависит от вашей реализации.
Помните, что способ получить объект календаря в полночь (10/05/2012 00:00:00) здесь - это Java-программа для получения текущей даты без отметки времени
Столбец даты в базе данных должен быть TIMESTAMP
или же DATE
или же TIME
,
Они получены как java.sql.Timestamp
или же java.sql.Date
или же java.sql.Time
соответственно.
Все эти классы расширяются java.util.Date
,
Таким образом, данные уже должны быть в том формате, который вы запрашиваете.
Так что тут нечего делать.