2016-05-02 20 views
0

Ich muss Minuten in den Zeitstempel hinzufügen und danach einen neuen Wert zurückgeben. Zeitstempel wird aus der Datenbank entnommen und Verfahren als String übergeben und hat dieses Muster: yyyy-MM-dd hh: mm: ss.SSSSSSMinuten zu Zeitstempel hinzufügen

public static String changeCreditTimeStampMin(String tmStmp, int minutesToAdd) { 

    tmStmp = tmStmp.substring(0, tmStmp.length() - 3); 
    try { 
     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS"); 
     java.util.Date parsedDate = dateFormat.parse(tmStmp); 
     java.sql.Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime() + minutesToAdd*60*1000); 
     tmStmp = timestamp.toString(); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
    return tmStmp; 
} 

Wie Sie sehen können, meine Logik verwendet Simple und damit zu verwenden, Ich muss die Teilstringoperation für den Zeitstempel verwenden. Meine Frage, gibt es eine bessere Möglichkeit, das gleiche Ergebnis zu erhalten, ohne die Timestamp-Zeichenfolge zu schneiden? Bitte beachten Sie, dass meine Java-Version 1.5 ist und ich keine neueren Versionen verwenden kann.

+0

Wenn Sie Ihren Zeitstempel als Zeichenfolge übergeben, müssen Sie die Zeichenfolge analysieren, um die Uhrzeit zu ändern. Brauchst du den Timestamp wirklich als String? Andernfalls könnte es besser sein, sie als eine Nummer in Ihrem Programm zu verwenden, besonders wenn Sie mehr Operationen darauf ausführen müssen. – Oebele

+0

Sind Sie besorgt über den Verlust der Präzision oder die Reihenfolge der Operationen? – rpy

+0

@Oebele Ich brauche es nicht als String, aber es ist, was ich von DAO-Klassen bekomme, in der Tat habe ich viele Variablen aus Ergebnis als String abgerufen, so dass ich diese Klasse nicht zu berühren. – Foxy

Antwort

0

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

Anderen Ansatz:

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

einen besseren Weg?

Ja, verwenden Sie java.time-Klassen anstelle der alten Legacy-Date-Time-Klassen.

Ändern Sie die Zeichenfolgeneingabe in das ISO 8601-Standardformat, indem Sie das Leerzeichen in der Mitte durch T ersetzen. Ich nehme an, dass diese Zeichenfolge einen Moment in UTC darstellen sollte. Also, fügen Sie eine Z, kurz für Zulu, was UTC bedeutet.

Die Klassen java.time verwenden beim Analysieren/Generieren von Zeichenfolgendarstellungen standardmäßig ISO 8601-Formate. Füttern Sie also direkt zur Analyse-Methode, ohne ein Formatierungsmuster zu definieren. Ein Instant repräsentiert einen Moment auf der Timeline in UTC mit einem Ergebnis von Nanosekunden.

Instant instant = Instant.parse(input); 

Minuten hinzufügen. Wenn Sie dies in UTC möchten, so dass Sie keine Zeitzonen und Anomalien wie Sommerzeit (DST) behandeln möchten, verwenden Sie diese Instant, um eine andere zu erstellen. Andernfalls gelten w Zeitzone, um eine ZonedDateTime zu erhalten.

long minutes = 5L; 
Instant later = instant.plus(minutes , ChronoUnit.MINUTES); 

Tipp: Führen Sie diese Instant Objekte um Ihre Anwendung statt Saiten.

Verwandte Themen