Преобразование метки времени в дату в 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,

Таким образом, данные уже должны быть в том формате, который вы запрашиваете.

Так что тут нечего делать.

Другие вопросы по тегам