如何在Open Refine中将Epoch时间转换为Date?

时间:2014-09-25 23:33:29

标签: date epoch openrefine

我不关心我使用哪种语言(只要它是Open Refine中可用的三种语言之一),但我需要将API从纪元时间返回的时间戳转换为常规语言日期(请参阅下面屏幕截图中的表达框)。对输出日期格式不太挑剔,只是它将日期保留到第二个。谢谢!

可以使用:GREL,Jython或Clojure。

Converting Epoch time to date in Open Refine

2 个答案:

答案 0 :(得分:1)

如果您必须坚持使用GREL,您可以使用以下单行:

inc(toDate("01/01/1970 00:00:00","dd/MM/YYYY H:m:s"),value.toNumber(),"seconds").toString('yyyy-MM-dd HH:mm:ss')

打破它:

GREL documentation中定义的

inc(date d, number value, string unit):返回在给定时间单位内按给定金额更改的日期。单位默认为'小时'

toDate(o, string format):返回转换为日期对象的o。 (GREL documentation

中显示toDate()的更复杂用法
  1. 我们使用字符串"01/01/1970 00:00:00"作为toDate()的输入来获取UNIX纪元的开始(1970年1月1日午夜)。

  2. 我们将新创建的日期对象传递给inc(),并将value.toNumber()的结果作为第二个参数传递(假设值是自Unix启动以来秒数的字符串表示形式) Epoch),作为第3个参数,字符串"seconds"告诉inc()第二个参数的单位。

  3. 我们最终使用以下格式将生成的日期对象转换为字符串:yyyy-MM-dd HH:mm:ss
  4. 测试数据

    以下是使用上述函数将一系列从Timestamp Generator抓取的时间戳转换为字符串日期的结果。

    | Name      | Value      | Date String         | 
    |-----------|------------|---------------------| 
    | Timestamp | 1491998962 | 2017-04-09 12:09:22 | 
    | +1 Hour   | 1492002562 | 2017-04-09 13:09:22 | 
    | +1 Day    | 1492085362 | 2017-04-10 12:09:22 | 
    | +1 Week   | 1492603762 | 2017-04-16 12:09:22 | 
    | +1 Month  | 1494590962 | 2017-05-09 12:09:22 | 
    | +1 Year   | 1523534962 | 2018-04-09 12:09:22 | 
    

答案 1 :(得分:0)

不幸的是,我不认为你可以用这样的GREL声明或者某些声明做到这一点,但我可能会因为其他人能够以某种方式工作而感到惊喜:

value.toDate().toString("dd/MM/yyy")

所以在此期间,使用这个Jython / Python代码:

import time;

# This is a comment.
# We change 'value' to an integer, since time needs to work with numbers.
# If we needed to, we could also * 1000 if we had a Unix Epoch Time in seconds, instead of milliseconds.

# We also have no idea what the local time zone is for this, which could affect the date.  But we digress...

epochlong = int(float(value));

datetimestamp = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(epochlong));

return datetimestamp