Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datetime Groovy:如何初始化和比较不同时区的日期/时间值?_Datetime_Groovy - Fatal编程技术网

Datetime Groovy:如何初始化和比较不同时区的日期/时间值?

Datetime Groovy:如何初始化和比较不同时区的日期/时间值?,datetime,groovy,Datetime,Groovy,我需要标准化和比较不同时区中的日期/时间字段。你如何找出下面两次之间的时差 "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 解决方案: Gr

我需要标准化和比较不同时区中的日期/时间字段。你如何找出下面两次之间的时差

"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

解决方案:

  • Groovy/Java日期对象存储为之后的毫秒数 1970年及以后的版本不直接包含任何时区信息
  • 使用Date.parse方法将新日期初始化为指定格式
  • 使用SimpleDataFormat类指定所需的输出格式
  • 使用SimpleDataFormat.setTimeZone指定输出的时区 资料
  • 通过使用欧洲/伦敦时区而不是格林尼治标准时间,它将 自动调整日光节约时间
  • 有关日期时间模式选项的完整列表,请参见
  • -


    或者,使用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
    

    哇。看起来不可读,是吗?

    Date.parse()已被弃用。改用SimpleDataFormat.parse()。不推荐使用Java方法
    Date.parse()
    。但是,带有两个参数(此处使用)的groovy GDK
    Date.parse()
    不可用。
    @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
    
    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))