Das Standardformat von Java.util.date lautet ungefähr "Mon May 27 11:46:15 IST 2013". Wie kann ich diesen in einen Zeitstempel umwandeln und in Sekunden die Differenz zwischen derselben und der aktuellen Uhrzeit berechnen?
Java.util.Date date= new Java.util.Date();
Timestamp ts_now = new Timestamp(date.getTime());
Der obige Code gibt den aktuellen Zeitstempel an. Ich habe jedoch keine Ahnung, wie ich den Zeitstempel der obigen Zeichenfolge finden kann.
Sie können die Klasse Calendar
zum Konvertieren von Date
verwenden.
public long getDifference()
{
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy");
Date d = sdf.parse("Mon May 27 11:46:15 IST 2013");
Calendar c = Calendar.getInstance();
c.setTime(d);
long time = c.getTimeInMillis();
long curr = System.currentTimeMillis();
long diff = curr - time; //Time difference in milliseconds
return diff/1000;
}
Beste
String str_date=month+"-"+day+"-"+yr;
DateFormat formatter = new SimpleDateFormat("MM-dd-yyyy");
Date date = (Date)formatter.parse(str_date);
long output=date.getTime()/1000L;
String str=Long.toString(output);
long timestamp = Long.parseLong(str) * 1000;
Sie können DateFormat
(Java.text. *) Verwenden, um das Datum zu analysieren:
DateFormat df = new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy", Locale.ENGLISH);
Date d = df.parse("Mon May 27 11:46:15 IST 2013")
Sie müssen das Gebietsschema ändern, um es an Ihr eigenes anzupassen (hier erhalten Sie 10:46:15). Dann können Sie denselben Code verwenden, um ihn in einen Zeitstempel umzuwandeln.
Sie können verwenden
long startTime = date.getTime() * 1000000;;
long estimatedTime = System.nanoTime() - startTime;
Zeit in Nano zu bekommen.
Ich gebe die moderne Antwort. Die Klasse Timestamp
war immer schlecht gestaltet, ein echter Hack über die bereits schlecht gestaltete Klasse Date
. Beide Klassen sind längst überholt. Benutze sie nicht.
Wenn die Frage gestellt wurde, benötigen Sie ein Timestamp
, um einen Zeitpunkt an die SQL-Datenbank zu senden. Seit JDBC 4.2 ist das nicht mehr der Fall. Angenommen, Ihre Datenbank benötigt ein timestamp with time zone
(empfohlen für echte Zeitstempel), übergeben Sie ein OffsetDateTime
.
Bevor wir das tun können, müssen wir ein echtes Problem mit Ihrem Sample-String überwinden, Mon May 27 11:46:15 IST 2013
: Abkürzung für die Zeitzone. IST
kann Irish Summer Time, Israel Standard Time oder India Standard Time bedeuten (Ich habe sogar gelesen, dass Java kann es in Atlantic/Reykjavik Zeitzone - Icelandic Standard Time analysieren?) Um die Interpretation zu steuern, übergeben wir unsere bevorzugte Zeitzone an den Formatierer, den wir zum Parsen verwenden.
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("EEE MMM dd HH:mm:ss ")
.appendZoneText(TextStyle.SHORT, Set.of(ZoneId.of("Asia/Kolkata")))
.appendPattern(" yyyy")
.toFormatter(Locale.ROOT);
String dateString = "Mon May 27 11:46:15 IST 2013";
OffsetDateTime dateTime = formatter.parse(dateString, Instant::from)
.atOffset(ZoneOffset.UTC);
System.out.println(dateTime);
Dieses Snippet druckt:
2013-05-27T06: 16: 15Z
Dies ist das UTC-Äquivalent Ihrer Zeichenfolge (unter der Annahme, dass IST für India Standard Time war). Übergeben Sie das OffsetDateTime
mit einem der PreparedStatement.setObject
Methoden (nicht setTimestamp
).
Wie kann ich dies in einen Zeitstempel umwandeln und die Differenz zwischen derselben und der aktuellen Zeit in Sekunden berechnen?
Die Berechnung der Differenz in Sekunden geht mit Java.time ganz natürlich:
long differenceInSeconds = ChronoUnit.SECONDS
.between(dateTime, OffsetDateTime.now(ZoneOffset.UTC));
System.out.println(differenceInSeconds);
Beim Laufen bekam ich gerade:
202213260
Link: Oracle Tutorial: Date Time Erklären der Verwendung von Java.time.