2017-08-17 4 views
-1

何をしようとしているのですか?イベントまでの分を確認してください。 (私はUTC -5時間の中央時間にいる)。私が手 オブジェクトは、私は、文字列を取るときに、このようになります。そのJSON要素です:投稿されたUTCタイムスタンプと現在の時刻からの分数の差を見つけよう

/日(1502964420000から0500)/

私はことができるようになります。

//take the departure time and subtract it from the current time. Divide by 60 
    timeStamp = timeStamp.substring(6,16); 

これが与えます私は取得するためにタイムコンバータを使用することができます1502964420:2017年8月17日木曜日5:07:00

問題は..それを減算するために、同じ形式で現在の時刻を取得するにはどうすればよいですか? (これを行う良い方法がある場合は、そのアドバイスも喜んで受け取ります)。

+0

1502964420は、時代からの秒であるようです。現在の時刻を同じ形式でどのように取得しますか?私は[この回答](https://stackoverflow.com/a/43687687/5772882)をお勧めします。 –

+0

[Javaで1970年以降に秒を見つける方法](https://stackoverflow.com/questions/8263148/how-to-find-seconds-since-1970-in-java) –

答えて

0

あなたはDate currentDate = new Date()いずれかを使用でき、その後currentDate.getTime()はミリ秒単位で、現在のUnixタイムを取得するか、Calendar級を使用します。Calendar currentDate = Calendar.getInstance()currentDate.getTime().getTime()はミリ秒単位で現在のUnix時刻を取得します。

jsonから解析された日付で同じことを行い、2つの値の差を計算することができます。差を分単位で取得するには、(60 * 1000)で割ります。

+0

のアイデアは正しいです若者に古くなった古いクラスの「日付」と「カレンダー」を使用するように教えてはいけません。今日私たちはずっと優れています。代わりに 'Instant'クラスをお勧めします。 –

1

データ型は、ZonedDateTimeです。あなたは簡単にこのようなcalculasionsとの変換を実行することができます。これにより

:あなたがここにZonedDateTimeについて知らないので

ZonedDateTime startTime = ZonedDateTime.now(); 
Instant timestamp = startTime.toInstant(); // You can also convert to timestamp 
ZonedDateTime endTime = startTime.plusSeconds(30); 

Duration duration = Duration.between(startTime, endTime); 

if(duration.isNegative()){ 
    // The end is before the start 
} 

long secondsBetween = duration.toMillis(); // duration between to seconds 

はZonedDateTimeに文字列を変換する方法を簡単に説明です:

注:文字列はISO8601形式でなければなりません!

String example = "2017-08-17T09:14+02:00"; 
OffsetDateTime offset = OffsetDateTime.parse(example); 
ZonedDateTime result = offset.atZoneSameInstant(ZoneId.systemDefault());