2013-06-08 6 views
11

DateTimeから1時間を差し引きたいGoogleで検索してみましたが、日付のコピーをとり、特定の期間を取るマイナスというメソッドがありますここに:http://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html#minus(long)Joda時間を使用してDateTimeに1時間

しかし、私はそれを使用する方法がわかりませんし、インターネット上の例を見つけることはできません。ここで

は私のコードです:

String string1 = (String) table_4.getValueAt(0, 1); 
    String string2= (String) table_4.getValueAt(0, 2); 

    DateTimeFormatter dtf = DateTimeFormat.forPattern("hh:mm a").withLocale(Locale.ENGLISH); 
    DateTime dateTime1 = dtf.parseDateTime(string1.toString()); 
    DateTime dateTime2 = dtf.parseDateTime(string2.toString()); 

    final String oldf = ("hh:mm a"); 
    final String newf= ("hh.mm 0"); 
    final String newf2= ("hh.mm a"); 
    final String elapsedformat = ("hh.mm"); 

    SimpleDateFormat format2 = new SimpleDateFormat(oldf); 
    SimpleDateFormat format2E = new SimpleDateFormat(newf); 

    Period timePeriod = new Period(dateTime1, dateTime2); 

    PeriodFormatter formatter = new PeriodFormatterBuilder() 

    .appendHours().appendSuffix(".") 
    .appendMinutes().appendSuffix("") 
    .toFormatter(); 

    String elapsed = formatter.print(timePeriod); 

    table_4.setValueAt(elapsed,0,3); 

    DecimalFormat df = new DecimalFormat("00.00"); 
    System.out.println(dateTime1); 
    table_4.setValueAt("", 0, 4); 
    table_4.setValueAt("", 0, 5); 

サンプルデータ:

dateTime1: 08:00 AM 
    dateTime2: 05:00 PM 

期間は9時間になります。私は私のプログラムで昼休みを差し引いて欲しいので、それは8時間にしてほしい。

私はこの愚かなコードでそれを試してみました:私もそう、私は1で、それを引くことができます倍増するstring1を解析しようとした

dateTime1.minus(-1) 

double strindtoD = Integer.parseInt(string1); 

私はまた別のDateTimeを作ってみましたし、2時間

String stringOneHour = ("01:00 AM"); 
DateTime dateTime3 = dtf.parseDateTime(stringOneHour.toString()); 
Period timePeriod = new Period(dateTime3, dateTime1); 

答えて

34

の違いを取得するためにピリオドを使用するだけ使用します。

dateTime.minusHours(1) 

これはdocumented in the APIです。

DateTimeオブジェクトはに変更できないため、操作だけでは効果がありません。あなたは、新しいオブジェクトに、このメソッドの結果を割り当てる(またはそれ自体を交換)する必要があります。

dateTime = dateTime.minusHours(1); 

2つのDateTime sの間の差異のうち、Periodの入手方法については、あなたが最初にIntervalを通過する必要があります:

Period period = new Interval(begin, end).toPeriod(); 

Link SO PeriodIntervalの両方がある理由を説明する投稿。

サイドノート:Joda Timeは、そのAPIに多くの迂回を使用しています。そのようにJavadocを読むことは、あるクラスのメソッドを読むだけでなく、継承されたすべての抽象クラス/インタフェースから継承されたメソッドのリストを見ることを要求します。例えば、DateTimeもまたReadableInstantである。あなたはそれに慣れていますが、それは簡単です。

+0

それは働いていないいや... – Maguzu

+0

Uhwhatパラメータint型このようなマイナス(ReadablePeriod期間)メソッドを使用できますか?確かにそうです。私はそれを使用し、それは正常に動作します。あなたが正しくやっていないことが他にもあるはずです...不変性に注意してください! – fge

+0

'DateTime subtracted = dateTime1.minus(Period.hours(1));'これは動作しますが、どのように私はperiodのパラメータとして使用しますか?Period periodFaggot = new Period(dateTime1、dateTime2); \t \t \t \t \t \t PeriodFormatterフォーマッタ=新しいPeriodFormatterBuilder() \t \t .appendHours()。appendSuffix( " ") \t \t .appendMinutes()。appendSuffix("") \t \t .toFormatter (); \t \t文字列elapsed = formatter.print(periodFaggot); ' – Maguzu

-1

Calenderクラスオブジェクトを使用すると、このメソッドを使用して時間を減算できます。ここ

cal.add(Calendar.HOUR_OF_DAY, -numberOfHours);

ともあなたがorg.joda.timeの古いバージョンを使用している場合は、完全な例link

0

です。日時は、その後、あなたは

期間がint時間、int型分、int型秒を受け入れ
 Date date = LocalDate.now().minus(new Period(1, 0, 0, 0)).toDate(); 

は、ミリ秒は

関連する問題