Java.util.dateのデフォルトの形式は、「Mon May 27 11:46:15 IST 2013」のようなものです。これをタイムスタンプに変換し、同じ時刻と現在の時刻の差を秒単位で計算するにはどうすればよいですか?
Java.util.Date date= new Java.util.Date();
Timestamp ts_now = new Timestamp(date.getTime());
上記のコードは、現在のタイムスタンプを提供します。しかし、上記の文字列のタイムスタンプを見つける方法はわかりませんでした。
Calendar
クラスを使用して、Date
を変換できます。
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;
}
一番いい
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;
DateFormat
(Java.text。*)を使用して、日付を解析できます。
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")
自分のロケールに合わせてロケールを変更する必要があります(これにより、10:46:15になります)。次に、タイムスタンプに変換するのと同じコードを使用できます。
使用できます
long startTime = date.getTime() * 1000000;;
long estimatedTime = System.nanoTime() - startTime;
Nanoで時間を取得します。
私は現代的な答えを提供しています。 Timestamp
クラスは常に適切に設計されていませんでした。すでに十分に設計されていないDate
クラスに加えて、実際のハックです。これらのクラスは両方とも今では古くなっています。それらを使用しないでください。
質問されたとき、SQLデータベースに特定の時点を送信するにはTimestamp
が必要になります。 JDBC 4.2以降はそうではありません。データベースにtimestamp with time zone
(真のタイムスタンプに推奨)が必要であると仮定して、OffsetDateTime
を渡します。
それを行う前に、サンプル文字列Mon May 27 11:46:15 IST 2013
:タイムゾーンの略語に関する実際の問題を克服する必要があります。 IST
は、アイルランドの夏時間、イスラエルの標準時間、またはインドの標準時間を意味する場合があります(Javaは、大西洋/レイキャビクのタイムゾーン—アイスランドの標準時間に解析するかもしれません)?)解釈を制御するために、解析に使用しているフォーマッタに優先タイムゾーンを渡します。
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);
このスニペットは次を印刷します:
2013-05-27T06:16:15Z
これは、UTCで文字列に相当します(ISTがインド標準時であると仮定)。 PreparedStatement.setObject
メソッド(OffsetDateTime
ではなく)のいずれかを使用して、setTimestamp
をデータベースに渡します。
これをタイムスタンプに変換し、同じ時刻と現在の時刻の差を秒単位で計算するにはどうすればよいですか?
秒単位での差の計算は、Java.timeでは非常に自然です。
long differenceInSeconds = ChronoUnit.SECONDS
.between(dateTime, OffsetDateTime.now(ZoneOffset.UTC));
System.out.println(differenceInSeconds);
今実行しているとき、私は得た:
202213260
リンク:Oracleチュートリアル:Date Time Java.timeの使用方法の説明。