2013-06-08 16 views
11

Voglio sottrarre 1 ora da un DateTime Ho provato a cercarlo su Google e ho scoperto che esiste un metodo chiamato meno che prende una copia della data e prende una durata specifica proprio qui: http://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html#minus(long)meno 1 ora a DateTime usando Joda Time

Ma non so come usarlo e non riesco a trovare un esempio su Internet.

Ecco il mio codice:

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); 

dati di esempio:

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

il periodo sarà di 9 ore. ma voglio che siano 8 ore solo perché voglio sottrarre la pausa pranzo nel mio programma.

ho provato con questo codice stupido:

dateTime1.minus(-1) 

Ho anche cercato analisi string1 raddoppiare così posso sottrarre da uno.

double strindtoD = Integer.parseInt(string1); 

Ho anche provato a fare un altro periodo DateTime e l'uso per ottenere la differenza dei due tempi

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

risposta

34

Basta usare:

dateTime.minusHours(1) 

Questo è documented in the API.

Si noti che gli oggetti DateTime sono immutabili, quindi l'operazione da sola non ha alcun effetto. È necessario assegnare il risultato di questo metodo per un nuovo oggetto (o sostituire se stesso):

dateTime = dateTime.minusHours(1); 

Per quanto riguarda come ottenere un Period fuori la differenza tra due DateTime s, è necessario prima passare attraverso un Interval:

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

Link ad un SO post che spiega il motivo per cui v'è sia Period e Interval.

Nota a margine: Joda Time utilizza un MOLTO di riferimenti indiretti nella sua API; in quanto tale, Javadoc non solo richiede di leggere i metodi per una classe, ma anche di consultare l'elenco di metodi ereditati da tutte le classi/interfacce astratte ereditate; per esempio, un DateTime è anche un ReadableInstant. Ci si abitua, però, è un gioco da ragazzi.

+0

no non funziona .. – Maguzu

+0

Uhwhat? Certo che lo fa Lo uso e funziona bene. Deve esserci qualcos'altro che non stai facendo bene ... Nota l'immutabilità! – fge

+0

'DateTime sottratto = dateTime1.minus (Period.hours (1));' questo funziona ma come utilizzare come parametro nel periodo 'Periodo periodoFaggot = new Period (dateTime1, dateTime2); \t \t \t \t \t \t PeriodFormatter formattatore = new PeriodFormatterBuilder() \t \t .appendHours(). AppendSuffix (" ") \t \t .appendMinutes(). AppendSuffix ("") \t \t .toFormatter(); \t \t Stringa scaduta = formatter.print (periodoFaggot); ' – Maguzu

-1

Utilizzando l'oggetto classe Calender è possibile utilizzare questo metodo per sottrarre ore.

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

e anche qui è completo esempio link

0

Se si utilizza una versione precedente di org.joda.time.DateTime allora si può usare meno (periodo ReadablePeriod) metodo come questo

 Date date = LocalDate.now().minus(new Period(1, 0, 0, 0)).toDate(); 

dove Periodo accetta ore int, int minuti, secondi, int Millis Parametri

Problemi correlati