2016-04-18 4 views
0

は、我々は完全な日付フォーマットさYYYYMMDDHHMMSS私はジョダで唯一のシャープな時間を(22:00など)に印刷するにはどうすればよいはジョダ時間でのみシャープな時間を得るためにどのよう

ArrayList<DateTime> dt = new ArrayList<DateTime>(); 
dt.add("20160418220000"); 
dt.add("20160418213000"); 
dt.add("20160418210000"); 
dt.add("20160418203000"); 

が含まれていたDateTimeのArrayListを持って言うことができます-時間?

+0

コードはコンパイルされません。あなたのリストには何を入れたいですか?文字列または 'DateTime'?それ以外の場合は、プロパティ操作を使用するとおそらく役に立ちます:[hourOfDay.roundFloorCopy()](http://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.Property.html#roundFloorCopy--) –

+0

@MenoHochschildコードはほんの一例で、リスト内に 'DateTime'を入れて別のリストと比較し、鋭い時間にのみ返すようにしたい –

+0

指定された形式は本当ですか? 'yyyMMddHHmmss'のように見える –

答えて

0

あなたはfloor-manipulationを適用するには、フィールドhourOfDayのプロパティを使用することができます。

List<DateTime> dtListOld = dt; // your input 
List<DateTime> dtListNew = new ArrayList<>(); 

for (DateTime dateTime : dtListOld) { 
    dtListNew.add(dateTime.hourOfDay().roundFloorCopy()); 
} 

これらのリストは、上記のあなたのコメントによるとDateTime -objectsを保持します。書式設定のような処理を行う場合は、DateTimeFormatterを使用できます。 DateTimeの他の丸められていないインスタンスとの比較のために、isEqual()のような通常の比較方法を使用することができます。

date-time-objectsのソースが時計(通常はミリ秒分数を生成する)である場合、厳密な日付 - 時刻(瞬時)のテストが鋭い時間に行われることがエラーになることに注意してください。この場合、比較対象の他のオブジェクトに同様の丸めモードを適用できます(ただし、分単位または2番目の単位)。

比較例:

DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyyMMddHHmmss"); 
DateTime now = DateTime.now(); 
DateTime other1 = dtf.parseDateTime("20160418184137"); 
DateTime other2 = dtf.parseDateTime("20160418180000"); 

DateTime sharpHour = now.hourOfDay().roundFloorCopy(); 

if (!sharpHour.isEqual(other1.minuteOfDay().roundFloorCopy())) { 
    System.out.println("Not matching sharp hour: " + other1); 
} 
DateTime other2Floor = other2.minuteOfDay().roundFloorCopy(); 
if (sharpHour.isEqual(other2Floor)) { 
    System.out.println("Matching sharp hour: " + other2); 
} 

出力:

鋭い時間一致しない:鋭い時間マッチング00

:2016-04-18T18:41:37.000 + 02: 2016-04-18T18:00:00.000 + 02:00

丸みを付けた丸めを使用すると、精度が必要以上に高いパーツを忘れないようにすることができます。たとえば、getMinuteOfHour() == 0のようなクエリ/条件では、可能な秒数またはミリ秒数がゼロからずれていることを考慮しません。

+0

これは本当に面白いです! if文または比較のためにroundFloorCopy()をどのように使うことができますか? –

+0

これは非常に役に立ち、ちょうど私が探していたものです、ありがとうヒープ! –

関連する問題