4

異なるタイムゾーンにある日付/時刻フィールドを標準化して比較する必要があります。例:次の2つの時間の時間差をどのように見つけますか?...

"18-05-2012 09:29:41 +0800"
"18-05-2012 09:29:21 +0900"

日付/時刻で標準変数を初期化するための最良の方法は何ですか?出力は、入力値とは異なり、ローカル環境とは異なるタイムゾーン(+0100など)で差分と正規化されたデータを表示する必要があります。

期待される出力:

18-05-2012 02:29:41 +0100 
18-05-2012 01:29:21 +0100
Difference: 01:00:20
4

3 に答える 3

6
import java.text.SimpleDateFormat

def dates = ["18-05-2012 09:29:41 +0800",
 "18-05-2012 09:29:21 +0900"].collect{
   new SimpleDateFormat("dd-MM-yyyy HH:mm:ss Z").parse(it)
}
def dayDiffFormatter = new SimpleDateFormat("HH:mm:ss")
dayDiffFormatter.setTimeZone(TimeZone.getTimeZone("UTC"))
println dates[0]
println dates[1]
println "Difference "+dayDiffFormatter.format(new Date(dates[0].time-dates[1].time))

おお。読みやすく見えませんね?

于 2012-05-24T10:25:59.137 に答える
3

解決:

  1. Groovy / Java Dateオブジェクトは、1970年以降のミリ秒数として保存されるため、タイムゾーン情報を直接含むことはありません。
  2. Date.parseメソッドを使用して、新しい日付を指定された形式に初期化します
  3. SimpleDateFormatクラスを使用して、必要な出力形式を指定します
  4. SimpleDateFormat.setTimeZoneを使用して、出力データのタイムゾーンを指定します
  5. GMTではなくヨーロッパ/ロンドンのタイムゾーンを使用することにより、夏時間に合わせて自動的に調整されます
  6. 日時パターンのオプションの完全なリストについては、こちらをご覧ください

-

import java.text.SimpleDateFormat
import java.text.DateFormat

//Initialise the dates by parsing to the specified format
Date timeDate1 = new Date().parse("dd-MM-yyyy HH:mm:ss Z","18-05-2012 09:29:41 +0800")
Date timeDate2 = new Date().parse("dd-MM-yyyy HH:mm:ss Z","18-05-2012 09:29:21 +0900")

DateFormat yearTimeformatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss Z")
DateFormat dayDifferenceFormatter= new SimpleDateFormat("HH:mm:ss")  //All times differences will be less than a day

// The output should contain the format in UK time (including day light savings if necessary)
yearTimeformatter.setTimeZone(TimeZone.getTimeZone("Europe/London"))

// Set to UTC. This is to store only the difference so we don't want the formatter making further adjustments
dayDifferenceFormatter.setTimeZone(TimeZone.getTimeZone("UTC"))

// Calculate difference by first converting to the number of milliseconds
msDiff = timeDate1.getTime() - timeDate2.getTime()
Date differenceDate = new Date(msDiff)

println yearTimeformatter.format(timeDate1)
println yearTimeformatter.format(timeDate2)
println "Difference " + dayDifferenceFormatter.format(differenceDate)
于 2012-05-24T09:07:31.613 に答える
3

または、JodaTimeパッケージを使用します

@Grab( 'joda-time:joda-time:2.1' )
import org.joda.time.*
import org.joda.time.format.*

String a = "18-05-2012 09:29:41 +0800"
String b = "18-05-2012 09:29:21 +0900"

DateTimeFormatter dtf = DateTimeFormat.forPattern( "dd-MM-yyyy HH:mm:ss Z" );

def start = dtf.parseDateTime( a )
def end = dtf.parseDateTime( b )

assert 1 == Hours.hoursBetween( end, start ).hours
于 2012-05-24T09:22:19.050 に答える