115

datejavaでカウントを取得した後に「timeStamp」を変換するにはどうすればよいですか?

私の現在のコードは次のとおりです。

public class GetCurrentDateTime {

    public int data() {
        int count = 0;
        java.sql.Timestamp timeStamp = new Timestamp(System.currentTimeMillis());
        java.sql.Date date = new java.sql.Date(timeStamp.getTime()); 
        System.out.println(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;
    }
}

これは私のデータベースです: ここに画像の説明を入力

ここで取得した出力は 2012-08-07 0 でしたが、同等のクエリは 3 を返します。なぜ 0 を取得するのですか?

4

16 に答える 16

207

DateスタンプのgetTime()値をパラメーターとして新しいオブジェクトを作成するだけです。

以下に例を示します (現在の時刻のタイムスタンプの例を使用しています)。

Timestamp stamp = new Timestamp(System.currentTimeMillis());
Date date = new Date(stamp.getTime());
System.out.println(date);
于 2012-08-07T04:29:11.527 に答える
10

ただ:

Timestamp timestamp = new Timestamp(long);
Date date = new Date(timestamp.getTime());
于 2016-12-08T19:14:54.383 に答える
4

まず第一に、を使用する利点を活用していませんPreparedStatementPreparedStatement最初に、次のように変更することをお勧めします。

PreparedStatement statement = con.prepareStatement("select * from orders where status=? AND date=?")

その後、 を使用statement.setXX(param_index, param_value)してそれぞれの値を設定できます。への変換についてtimestampは、次の javadoc を参照してください。

PreparedStatement.setTimeStamp()
タイムスタンプ

お役に立てれば!

于 2012-08-07T04:48:08.920 に答える
3

クエリで何を選択しようとしているのかはわかりませんが、UNIX_TIMESTAMP()引数がないと現在の時刻が返されることに注意してください。おそらく、有効な時間を引数として指定するか、条件を変更する必要があります。

編集:

質問に基づく時間制限付きクエリの例を次に示します。

PreparedStatement statement = con
        .prepareStatement("select * from orders where status='Q' AND date > ?");
Date date = new SimpleDateFormat("dd/MM/yyyy").parse("01/01/2000");
statement.setDate(1, new java.sql.Date(date.getTime()));

編集: タイムスタンプ列

タイムスタンプの使用java.sql.TimestampPreparedStatement.setTimestamp()の場合、つまり:

PreparedStatement statement = con
        .prepareStatement("select * from orders where status='Q' AND date > ?");
Date date = new SimpleDateFormat("dd/MM/yyyy").parse("01/01/2000");
Timestamp timestamp = new Timestamp(date.getTime());
statement.setTimestamp(1, timestamp);
于 2012-08-07T04:40:53.373 に答える
3
    Timestamp tsp = new Timestamp(System.currentTimeMillis());
   java.util.Date dateformat = new java.util.Date(tsp.getTime());
于 2015-12-21T16:03:08.820 に答える
3

他の回答はタイムゾーンにとらわれないように思われるため、実際のアプリケーションでは対応できないと感じています。タイムスタンプと JVM が異なるタイム ゾーンを使用している場合にタイムスタンプから日付への変換を正しく行うには、次のように Joda Time の LocalDateTime (または Java8 の LocalDateTime) を使用できます。

Timestamp timestamp = resultSet.getTimestamp("time_column");
LocalDateTime localDateTime = new LocalDateTime(timestamp);
Date trueDate = localDateTime.toDate(DateTimeZone.UTC.toTimeZone());

以下の例では、タイムスタンプが UTC であることを前提としています (通常、データベースの場合と同様)。toDateタイムスタンプが異なるタイムゾーンにある場合は、ステートメントのタイムゾーン パラメータを変更します。

于 2016-07-13T12:03:02.173 に答える