10

Timestamp 変数と Date 変数があり、等しいかどうかを比較したい (もちろん日付部分のみ)。コンストラクター Date(long) が時間の部分を節約することは私にとって驚きだったので、このコードは正しく動作しません:

date = resultSet.getDate(1);
timestamp = resultSet.getTimestamp(2);    
//...
if (date.equals(new Date (timestamp.getTime())) ...

次のようなコードでこれを解決します。

DateFormat dateFormat = new SimpleDateFormat ("yyyyMMdd");
if (date.equals(dateFormat.parse(dateFormat.format(timestamp)))) ...

または、SQLクエリでタイムスタンプを日付に変換できますが、タイムスタンプ表現も必要です。タイムスタンプから時間の部分を切り取るより良い方法はありますか?

4

4 に答える 4

15

変換の Java 8 アプローチ:

Date date = Date.valueOf(timestamp.toLocalDateTime().toLocalDate());

およびその逆:

Timestamp timestamp = Timestamp.valueOf(date.toLocalDate().atStartOfDay());
于 2016-01-26T14:59:16.347 に答える
3

この回答のメソッドを使用すると、次のようになります。

date = resultSet.getDate(1);
timestamp = resultSet.getTimestamp(2);    
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date);
cal2.setTimeInMillis(timestamp.getTime());
boolean sameDay = cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) &&
                  cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR);

タイムゾーンなどに関するこの方法の欠点について説明しているため、リンクされた回答を読む価値があります(その質問に対する他の回答のいくつかは、あなたが好むかもしれない代替アプローチを提供します)。

于 2013-02-12T12:16:25.653 に答える
1

これには 3 つのオプションがあります。

まず、ヨーダの時間とクラスDateTimeComparator.getDateOnlyInstance()を使用することです

2 つ目は、Apache とDateUtils.isSameDay()のコモンを使用することです。

3 つ目は、[カレンダー] を使用して時刻を設定し、年月日のみを比較します。Dave Webb が提案したように。

于 2013-02-12T12:18:27.523 に答える
1

別のアプローチは、エポック値の「日」の部分を使用することです。

Date d = new Date();
Timestamp t = new Timestamp(d.getTime());

long dateEpochDays = d.getTime() % (1000*60*60*24);
long timeStampEpochDays = t.getTime() %(1000*60*60*24);

System.out.println("date: " + dateEpochDays + " timestamp: " + timeStampEpochDays);
于 2016-01-26T15:10:51.907 に答える