web-dev-qa-db-ja.com

JavaでJava.util.dateのデフォルト形式をタイムスタンプに変換します

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

上記のコードは、現在のタイムスタンプを提供します。しかし、上記の文字列のタイムスタンプを見つける方法はわかりませんでした。

8
swateek

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;
}
12
Rahul Bobhate

一番いい

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;
8
Kishore

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になります)。次に、タイムスタンプに変換するのと同じコードを使用できます。

0
Salem

使用できます

  long startTime = date.getTime() * 1000000;;
  long estimatedTime = System.nanoTime() - startTime;

Nanoで時間を取得します。

Java Docs

0
nidhin

Java.time

私は現代的な答えを提供しています。 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の使用方法の説明。

0
Ole V.V.