it-swarm.com.de

Java: Konvertieren Sie String in TimeStamp

Ich habe ein Problem, während ich versuche, einen String in einen TimeStamp zu konvertieren. Ich habe ein Array, das das Datum im Format yyyy-MM-dd hat, und ich möchte das Format von yyyy-MM-dd HH:mm:ss.SSS ändern. Also benutze ich diesen Code: 

final String OLD_FORMAT = "yyyy-MM-dd";
final String NEW_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
String oldDateString = createdArray[k];
String newDateString;

DateFormat formatter = new SimpleDateFormat(OLD_FORMAT);
Date d = formatter.parse(oldDateString);
((SimpleDateFormat) formatter).applyPattern(NEW_FORMAT);
newDateString = formatter.format(d);
System.out.println(newDateString);

Timestamp ts = Timestamp.valueOf(newDateString);
System.out.println(ts);

und ich erhalte folgendes Ergebnis.

2009-10-20 00: 00: 00.000 

2009-10-20 00: 00: 00,0

aber wenn ich es einfach versuche 

String text = "2011-10-02 18:48:05.123";
ts = Timestamp.valueOf(text);
System.out.println(ts);

Ich bekomme das richtige Ergebnis: 

2011-10-02 18: 48: 05.123

Weißt du, was ich falsch mache? Danke für die Hilfe.

46
Dimitra Micha

Folgen Sie diesen Schritten für ein korrektes Ergebnis:

try {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
    Date parsedDate = dateFormat.parse(yourString);
    Timestamp timestamp = new Java.sql.Timestamp(parsedDate.getTime());
} catch(Exception e) { //this generic but you can control another types of exception
    // look the Origin of excption 
}

Bitte beachten Sie, dass .parse(String) eine ParseException werfen kann.

80
ZaoTaoBao
import Java.sql.Timestamp;
import Java.text.DateFormat;
import Java.text.ParseException;
import Java.text.SimpleDateFormat;
import Java.util.Date;

public class Util{
  public static Timestamp convertStringToTimestamp(String str_date) {
    try {
      DateFormat formatter;
      formatter = new SimpleDateFormat("dd/MM/yyyy");
       // you can change format of date
      Date date = formatter.parse(str_date);
      Java.sql.Timestamp timeStampDate = new Timestamp(date.getTime());

      return timeStampDate;
    } catch (ParseException e) {
      System.out.println("Exception :" + e);
      return null;
    }
  }
}
9
Harsh

Ich möchte die moderne Antwort beitragen. Als diese Frage im Jahr 2013 gestellt wurde, war die Verwendung der Timestamp-Klasse richtig, zum Beispiel um ein Datum und eine Uhrzeit in Ihrer Datenbank zu speichern. Heute ist die Klasse längst überholt. Die moderne Java-API für Datums- und Zeitangaben wurde im Frühjahr 2014 vor dreieinhalb Jahren mit Java 8 veröffentlicht. Ich empfehle, dass Sie stattdessen diese verwenden.

Abhängig von Ihrer Situation und den genauen Anforderungen gibt es für Timestamp zwei natürliche Ersetzungen:

  • Instant ist ein Punkt auf der Zeitleiste. Für die meisten Zwecke würde ich es für am sichersten halten, dies zu verwenden. Ein Instant ist unabhängig von der Zeitzone und funktioniert normalerweise auch in Situationen, in denen Ihr Clientgerät und Ihr Datenbankserver unterschiedliche Zeitzonen ausführen.
  • LocalDateTime ist ein Datum und eine Uhrzeit ohne Zeitzone, wie 2011-10-02 18: 48: 05.123 (um die Frage zu zitieren).

Ein moderner JDBC-Treiber (JDBC 4.2 oder höher) und andere moderne Tools für den Datenbankzugriff speichern gerne entweder Instant oder LocalDateTime in Ihrer Datenbankspalte des Datentyps timestamp. Beide Klassen und die anderen Datums-/Uhrzeit-Klassen, die ich in dieser Antwort verwende, gehören zur modernen API, die als Java.time oder JSR-310 bezeichnet wird.

Es ist am einfachsten, Ihre Zeichenfolge in LocalDateTime umzuwandeln.

    DateTimeFormatter formatter
            = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss.SSS");
    String text = "2011-10-02 18:48:05.123";
    LocalDateTime dateTime = LocalDateTime.parse(text, formatter);
    System.out.println(dateTime);

Dies druckt

2011-10-02T18:48:05.123

Wenn Ihre Zeichenfolge im Format JJJJ-MM-TT vorliegt, führen Sie stattdessen Folgendes aus:

    String text = "2009-10-20";
    LocalDateTime dateTime = LocalDate.parse(text).atStartOfDay();
    System.out.println(dateTime);

Dies druckt

2009-10-20T00:00

Oder noch besser, nehmen Sie die Ausgabe von LocalDate.parse() und speichern Sie sie in einer Datenbankspalte des Datentyps date.

In beiden Fällen ist das Verfahren zum Konvertieren von LocalDateTime in Instant wie folgt:

    Instant ts = dateTime.atZone(ZoneId.systemDefault()).toInstant();
    System.out.println(ts);

Ich habe eine Konvertierung mit der Standardzeitzone der JVM angegeben, da dies die veraltete Klasse verwendet hätte. Dies ist jedoch fragil, da die Zeitzoneneinstellung möglicherweise von anderen Teilen Ihres Programms oder von anderen Programmen, die in derselben JVM ausgeführt werden, unter unseren Füßen geändert wird. Wenn Sie können, geben Sie stattdessen eine Zeitzone im Format Region/Stadt an. Beispiel:

    Instant ts = dateTime.atZone(ZoneId.of("Europe/Athens")).toInstant();
7
Ole V.V.
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

Date date = formatter.parse(dateString);

Timestamp timestamp = new Timestamp(date.getTime());

System.out.println(timestamp);
2
Akshay Misal

konvertieren Sie zuerst Ihre Datumszeichenfolge in date und dann in timestamp, indem Sie die folgenden Zeilen verwenden

Date date=new Date();
Timestamp timestamp = new Timestamp(date.getTime());//instead of date put your converted date
Timestamp myTimeStamp= timestamp;
2
KhAn SaAb
DateFormat formatter;
formatter = new SimpleDateFormat("dd/MM/yyyy");
Date date = (Date) formatter.parse(str_date);
Java.sql.Timestamp timeStampDate = new Timestamp(date.getTime());
2
Mahesh Narwade

Ich bin sicher, die Lösung ist, dass Ihr oldDateString so etwas wie "2009-10-20" ist. Offensichtlich enthält dies keine Zeitdaten, die niedriger als Tage sind. Wenn Sie diesen String mit Ihrem neuen Formatierer formatieren, woher soll er die Minuten, Sekunden und Millisekunden erhalten?

Das Ergebnis ist also absolut korrekt: 2009-10-20 00: 00: 00.000

Um dies zu lösen, benötigen Sie den ursprünglichen Zeitstempel (einschließlich Zeitangaben) vor der ersten Formatierung.

1
solver

Der einfache Weg, um String in Java.sql.Timestamp zu konvertieren:

Timestamp t = new Timestamp(DateUtil.provideDateFormat().parse("2019-01-14T12:00:00.000Z").getTime());
0
Yuliia Ashomok

kannst du es mal probieren ...

String dob="your date String";
String dobis=null;
final DateFormat df = new SimpleDateFormat("yyyy-MMM-dd");
final Calendar c = Calendar.getInstance();
try {
    if(dob!=null && !dob.isEmpty() && dob != "")
    {
    c.setTime(df.parse(dob));
    int month=c.get(Calendar.MONTH);
    month=month+1;
    dobis=c.get(Calendar.YEAR)+"-"+month+"-"+c.get(Calendar.DAY_OF_MONTH);
    }

}
0
Suresh U