2

(Open Refine で利用可能な 3 つの言語のうちの 1 つであれば) 使用する言語は気にしませんが、API から返されたタイムスタンプをエポック時間から通常の日付に変換する必要があります (下のスクリーンショットの [式] ボックスを参照)。 )。出力日付形式についてはあまりうるさくなく、日付を秒まで保持するだけです。ありがとう!

使用できるもの: GREL、Jython、または Clojure。

Open Refine でエポック時間を日付に変換する

4

2 に答える 2

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')

それを分解する:

inc(date d, number value, string unit)GREL ドキュメントで定義されているとおり: 指定された時間単位で指定された量だけ変更された日付を返します。単位のデフォルトは「時間」

toDate(o, string format)o:日付オブジェクトに変換して返します。(より複雑な の使用法は、 GREL のドキュメントtoDate()に示されています)

  1. UNIX エポック (1970 年 1 月 1 日午前 0 時) の開始を取得するための"01/01/1970 00:00:00"入力として文字列を使用します。toDate()

  2. 新しく作成された日付オブジェクトをinc()2 番目のパラメーターとしてvalue.toNumber()(値が Unix エポックの開始からの秒数の文字列表現であると仮定して) の結果を渡し、3 番目のパラメーターとして、日付の単位を示す文字列"seconds"を渡します。 inc()2 番目のパラメーター。

  3. 最後に、次の形式を使用して、結果の日付オブジェクトを文字列に変換します。yyyy-MM-dd HH:mm:ss

テストデータ

以下は、上記の関数を使用して、タイムスタンプ ジェネレーターから取得した一連のタイムスタンプを文字列の日付に変換した結果です。

| 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 | 
于 2017-04-12T12:40:12.333 に答える
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
于 2014-09-27T20:12:05.377 に答える