2013-06-08 3 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 시간 만 원한다.

나는이 바보 같은 코드로 시도 :

dateTime1.minus(-1) 

가 나는 또한 내가 하나를 뺄 수 두 배로 string1를 분석했습니다.

dateTime.minusHours(1) 

documented in the API입니다 :

double strindtoD = Integer.parseInt(string1); 

는 또한

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

답변

34

그냥 사용하는 두 시간의 차이를 얻기 위해 다른 DateTime 사용 기간을 했어요.

DateTime 개체는 불변이고이므로 작업만으로는 효과가 없습니다. 당신이 먼저 Interval 통과해야, 두 DateTime들 사이의 차이 밖으로 Period을 구하는 방법에 관해서는

dateTime = dateTime.minusHours(1); 

: 새 객체에이 방법의 결과를 할당 (또는 자체를 교체)해야합니다 PeriodInterval 모두가 왜에

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

Link는 SO 설명을 게시 할 수 있습니다.

사이드 노트 : Joda Time은 API에서 많은 방향을 사용합니다. Javadoc를 읽는 것만으로도, 1 개의 클래스의 메소드를 읽어 낼 필요가있을뿐만 아니라, 상속 된 모든 abstract 클래스/인터페이스로부터 상속 된 메소드의리스트도 참조 할 필요가 있습니다. 예를 들어, DateTimeReadableInstant입니다. 하나 익숙해지면, 그것은 산들 바람입니다.

+0

가 작동하지 아니 .. – Maguzu

+0

Uhwhat 매개 변수 int로이 같은 마이너스 (ReadablePeriod 기간) 방법을 사용할 수 있습니까? 물론 그렇습니다. 나는 그것을 사용하고 잘 작동합니다. 당신이 옳지 않은 일이있을 것입니다 ... 불변성을 주목하십시오! – fge

+0

'DateTime subtracted = dateTime1.minus (Period.hours (1));'이 작동하지만 어떻게 기간 매개 변수로 사용합니까? 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

캘린더 클래스 개체를 사용하면이 방법을 사용하여 시간을 뺄 수 있습니다. 당신이 org.joda.time의 이전 버전을 사용하는 경우도 여기에

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

이 완료 예를 link

0

입니다.날짜 시간 당신은

기간은 INT 시간, INT 분, INT 초를 받아
 Date date = LocalDate.now().minus(new Period(1, 0, 0, 0)).toDate(); 

이 밀리 초가