it-swarm.com.de

Wie füge ich meinem Datum Minuten hinzu?

Ich habe dieses Datumsobjekt:

SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Date d1 = df.parse(interviewList.get(37).getTime());

wert von d1 ist Fri Jan 07 17:40:00 PKT 2011

Jetzt versuche ich, dem obigen Datum 10 Minuten hinzuzufügen.

Calendar cal = Calendar.getInstance();
cal.setTime(d1);
cal.add(Calendar.MINUTE, 10);
String newTime = df.format(cal.getTime());

Der Wert von newTime ändert sich in 2011-50-07 17:50 Er sollte jedoch 07-01-2011 17:50 sein.

Es fügt Minuten richtig hinzu, aber es ändert sich auch Monat, weiß nicht warum!

88
junaidp

Das Problem für Sie ist, dass Sie mm verwenden. Sie sollten MM verwenden. MM ist für Monat und mm für Minuten. Versuchen Sie es mit yyyy-MM-dd HH:mm

Anderer Ansatz: 

So einfach kann das sein (andere Option ist joda-time

static final long ONE_MINUTE_IN_MILLIS=60000;//millisecs

Calendar date = Calendar.getInstance();
long t= date.getTimeInMillis();
Date afterAddingTenMins=new Date(t + (10 * ONE_MINUTE_IN_MILLIS));
170

sie können die DateUtils-Klasse im Paket org.Apache.commons.lang3.time verwenden

int addMinuteTime = 5;
Date targetTime = new Date(); //now
targetTime = DateUtils.addMinutes(targetTime, addMinuteTime); //add minute
37
Alireza Alallah

Komfortmethode für die Implementierung von @ Pangaea's Antwort:

/*
*  Convenience method to add a specified number of minutes to a Date object
*  From: http://stackoverflow.com/questions/9043981/how-to-add-minutes-to-my-date
*  @param  minutes  The number of minutes to add
*  @param  beforeTime  The time that will have minutes added to it
*  @return  A date object with the specified number of minutes added to it 
*/
private static Date addMinutesToDate(int minutes, Date beforeTime){
    final long ONE_MINUTE_IN_MILLIS = 60000;//millisecs

    long curTimeInMs = beforeTime.getTime();
    Date afterAddingMins = new Date(curTimeInMs + (minutes * ONE_MINUTE_IN_MILLIS));
    return afterAddingMins;
}
30
jeznag

Dies ist falsch angegeben:

SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");

Sie verwenden Minuten anstelle von Monat (MM)

16
Dawood

Um jegliche Abhängigkeit zu vermeiden, können Sie Java.util.Calendar wie folgt verwenden:

    Calendar now = Calendar.getInstance();
    now.add(Calendar.MINUTE, 10);
    Date teenMinutesFromNow = now.getTime();

In Java 8 haben wir eine neue API:

    LocalDateTime dateTime = LocalDateTime.now().plus(Duration.of(10, ChronoUnit.MINUTES));
    Date tmfn = Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
14
Marco Montel

tl; dr

LocalDateTime.parse( 
    "2016-01-23 12:34".replace( " " , "T" )
)
.atZone( ZoneId.of( "Asia/Karachi" ) )
.plusMinutes( 10 )

Java.time

Verwenden Sie die ausgezeichneten Java.time-Klassen für Datums-/Uhrzeitarbeit. Diese Klassen ersetzen die störenden alten Datum-Uhrzeit-Klassen wie Java.util.Date und Java.util.Calendar.

ISO 8601

Die Java.time-Klassen verwenden standardmäßig die Standardformate ISO 8601 zum Analysieren/Generieren von Zeichenfolgen von Datum-Uhrzeit-Werten. Ersetzen Sie den SPACE in der Mitte durch eine T, damit Ihre Eingabezeichenfolge übereinstimmt. 

String input = "2016-01-23 12:34" ;
String inputModified = input.replace( " " , "T" );

LocalDateTime

Analysieren Sie Ihre Eingabezeichenfolge als LocalDateTime, da keine Informationen zur Zeitzone oder zum Offset von UTC vorhanden sind.

LocalDateTime ldt = LocalDateTime.parse( inputModified );

Zehn Minuten hinzufügen.

LocalDateTime ldtLater = ldt.plusMinutes( 10 );

ldt.toString (): 2016-01-23T12: 34

ldtLater.toString (): 2016-01-23T12: 44

Siehe Live-Code in IdeOne.com .

Da LocalDateTime keine Zeitzone hat, repräsentiert nicht einen Punkt auf der Timeline. Wenden Sie eine Zeitzone an, um einen tatsächlichen Moment zu übersetzen. Geben Sie einen richtigen Zeitzonennamen im Format continent/region an, wie America/Montreal , Africa/Casablanca oder Pacific/Auckland oder Asia/Karachi . Verwenden Sie niemals die Abkürzung für 3-4 Buchstaben wie EST oder IST oder PKT, da sie nicht echte Zeitzonen sind, nicht standardisiert und nicht einmal eindeutig (!). 

ZonedDateTime

Wenn Sie die beabsichtigte Zeitzone für diesen Wert kennen, wenden Sie eine ZoneId an, um eine ZonedDateTime zu erhalten. 

ZoneId z = ZoneId.of( "Asia/Karachi" );
ZonedDateTime zdt = ldt.atZone( z );

zdt.toString (): 2016-01-23T12: 44 + 05: 00 [Asien/Karachi]

Anomalien

Überlegen Sie, ob Sie diese zehn Minuten vor oder nach dem Hinzufügen einer Zeitzone hinzufügen möchten. Sie können ein ganz anderes Ergebnis erhalten, da Anomalien wie die Sommerzeit (DST) auftreten, die die Wanduhrzeit verschieben.

Ob Sie die 10 Minuten vor oder nach dem Hinzufügen der Zone hinzufügen, hängt von der Bedeutung Ihres Geschäftsszenarios und Ihrer Regeln ab.

Tipp: Wenn Sie einen bestimmten Moment auf der Zeitleiste haben, behalten Sie immer die Zeitzoneninformationen. Verlieren Sie diese Informationen nicht wie bei Ihren Eingabedaten. Soll der Wert 12:34 mittags in Pakistan oder mittags in Frankreich oder mittags in Québec sein? Wenn Sie in Pakistan Mittag meinten, sagen Sie dies, indem Sie mindestens den Offset von UTC (+05:00) und noch besser den Namen der Zeitzone (Asia/Karachi) angeben.

Instant

Wenn Sie den gleichen Moment wie durch die Linse von UTC sehen möchten, extrahieren Sie eine Instant. Die Instant Klasse repräsentiert einen Moment auf der Timeline in UTC mit einer Auflösung von Nanosekunden (bis zu neun (9) Ziffern eines Dezimalbruchs). 

Instant instant = zdt.toInstant();

Konvertieren

Vermeiden Sie die lästigen alten Datum-Zeit-Klassen, wann immer dies möglich ist. Aber wenn Sie müssen, können Sie konvertieren. Rufen Sie neue Methoden auf, die den alten Klassen hinzugefügt wurden. 

Java.util.Date utilDate = Java.util.Date.from( instant );

Über Java.time

Das Java.time -Framework ist in Java 8 und höher integriert. Diese Klassen ersetzen die lästigen alten Legacy Date-Time-Klassen wie Java.util.Date , Calendar , & SimpleDateFormat .

Das Joda-Time -Projekt, jetzt im Wartungsmodus , empfiehlt die Migration zu Java.time.

Weitere Informationen finden Sie im Oracle Tutorial . In Stack Overflow finden Sie viele Beispiele und Erklärungen. Spezifikation ist JSR 310 .

Wo erhalten Sie die Java.time-Klassen? 

  • Java SE 8 und SE 9 und später
    • Eingebaut. 
    • Teil der Standard-Java-API mit einer mitgelieferten Implementierung.
    • Java 9 fügt einige kleinere Funktionen und Korrekturen hinzu.
  • Java SE 6 und SE 7
    • Ein Großteil der Java.time-Funktionalität wird in ThreeTen-Backport auf Java 6 & 7 zurückportiert.
  • Android

Das ThreeTen-Extra -Projekt erweitert Java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Erweiterungen von Java.time. Hier finden Sie nützliche Klassen wie Interval , YearWeek , YearQuarter und more .

5
Basil Bourque

Im Muster Ihres SimpleDateFormat ist ein Fehler aufgetreten. es sollte sein 

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
4
Baldrick

verwenden Sie dieses Format,

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");

mm für Minuten und MM für Monat

4
Kushan

Nachdem Sie das Datum analysiert haben, kann ich mit dieser Utility-Funktion Stunden, Minuten oder Sekunden hinzufügen:

public class DateTimeUtils {
    private static final long ONE_HOUR_IN_MS = 3600000;
    private static final long ONE_MIN_IN_MS = 60000;
    private static final long ONE_SEC_IN_MS = 1000;

    public static Date sumTimeToDate(Date date, int hours, int mins, int secs) {
        long hoursToAddInMs = hours * ONE_HOUR_IN_MS;
        long minsToAddInMs = mins * ONE_MIN_IN_MS;
        long secsToAddInMs = secs * ONE_SEC_IN_MS;
        return new Date(date.getTime() + hoursToAddInMs + minsToAddInMs + secsToAddInMs);
    }
}

Seien Sie vorsichtig, wenn Sie lange Zeiträume hinzufügen, 1 Tag ist nicht immer 24 Stunden (Sommerzeit-Anpassungen, Schaltsekunden usw.). Calendar wird dafür empfohlen.

2
David Miguel

Arbeite für mich DateUtils

//import
import org.Apache.commons.lang.time.DateUtils

...

        //Added and removed minutes to increase current range dates
        Date horaInicialCorteEspecial = DateUtils.addMinutes(new Date(corteEspecial.horaInicial.getTime()),-1)
        Date horaFinalCorteEspecial = DateUtils.addMinutes(new Date(corteEspecial.horaFinal.getTime()),1)
0
Samuel Ivan