web-dev-qa-db-fra.com

moins 1 heure à DateTime en utilisant Joda Time

Je veux juste soustraire 1 heure d'une DateTime j'ai essayé de la chercher sur Google et j'ai trouvé qu'il existe une méthode appelée moins qui prend une copie de la date et prend une durée spécifique ici: http: // www. joda.org/joda-time/apidocs/org/joda/time/DateTime.html#minus(long)

Mais je ne sais pas comment l'utiliser et je ne trouve pas d'exemple sur Internet.

Voici mon code:

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

Exemple de données:

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

la période sera de 9 heures. mais je veux que ce soit 8 heures seulement parce que je veux soustraire la pause de midi dans mon programme.

je l'ai essayé avec ce code stupide:

dateTime1.minus(-1) 

J'ai également essayé d'analyser string1 pour le doubler afin de pouvoir le soustraire d'un point.

double strindtoD = Integer.parseInt(string1);

J'ai également essayé de créer une autre variable DateTime et d'utiliser une période pour obtenir la différence des deux fois.

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

Il suffit d'utiliser:

dateTime.minusHours(1)

Ceci est documenté dans l'API .

Notez que les objets DateTime sont immuables , ainsi l'opération seule n'a aucun effet. Vous devez affecter le résultat de cette méthode à un nouvel objet (ou le remplacer lui-même):

dateTime = dateTime.minusHours(1);

Pour obtenir une valeur Period de la différence entre deux DateTimes, vous devez d'abord passer par une Interval:

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

Lien vers un message SO expliquant pourquoi Period et Interval sont à la fois.

Note: Joda Time utilise BEAUCOUP d’indirections dans son API; pour lire le Javadoc, il est non seulement nécessaire de lire les méthodes d’une classe, mais aussi de consulter la liste des méthodes héritées de toutes les classes abstraites héritées/Par exemple, une DateTime est aussi une ReadableInstant. Une habitude à laquelle vous vous habituez, cependant, c'est un jeu d'enfant.

39
fge

Si vous utilisez une ancienne version de org.joda.time.DateTime, vous pouvez utiliser la méthode minus (ReadablePeriod period) comme celle-ci.

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

où Period accepte int heures, int minutes, int secondes, paramètres int millis

0
Lance Reid