我如何在 Apache Nifi 中将时间戳转换为日期时间
How can ı convert timestamp to datetime in Apache Nifi
我想将时间戳转换为日期时间。
这是我的 JSON 输入:
{
"preMarket_timestamp": 1646830062,
"regularMarket_timestamp": 1646773204,
"earningsTimestamp": 1643301000,
"earningsTimestampStart": 1651003200,
"earningsTimestampEnd": 1651521600
}
我想要的 JSON 结果:
{
"preMarket_timestamp": "2022/03/09 16:09:26",
"regularMarket_timestamp": "2022/03/09 00:00:04",
"earningsTimestamp": "2022/01/27 19:30:00",
"earningsTimestampStart": "2022/04/26 23:00:00",
"earningsTimestampEnd": "2022/05/02 23:00:00"
}
是否有进行此转换的操作,或者我可以使用 Nifi 表达式语言进行转换吗?我卡在这里了。
不一定要用“/”分隔,也可以是“-”。
使用 ScriptedTransformRecord 处理器:
Record Reader
: JsonTreeReader
Record Writer
: JsonRecordSetWriter
Script Language
: Groovy
Script Body
:
import org.apache.nifi.serialization.record.RecordField;
import org.apache.nifi.serialization.record.RecordFieldType;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
def formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
formatter.setTimeZone(TimeZone.getTimeZone("Europe/Istanbul"))
record.setValue("preMarket_timestamp_formatted", formatter.format(new Date(record.getAsLong("preMarket_timestamp")*1000)))
record.setValue("regularMarket_timestamp_formatted", formatter.format(new Date(record.getAsLong("regularMarket_timestamp")*1000)))
record.setValue("earningsTimestamp_formatted", formatter.format(new Date(record.getAsLong("earningsTimestamp")*1000)))
record.setValue("earningsTimestampStart_formatted", formatter.format(new Date(record.getAsLong("earningsTimestampStart")*1000)))
record.setValue("earningsTimestampEnd_formatted", formatter.format(new Date(record.getAsLong("earningsTimestampEnd")*1000)))
return record
输出json:
{
"preMarket_timestamp" : 1646830062,
"regularMarket_timestamp" : 1646773204,
"earningsTimestamp" : 1643301000,
"earningsTimestampStart" : 1651003200,
"earningsTimestampEnd" : 1651521600,
"preMarket_timestamp_formatted" : "2022/03/09 15:47:42",
"regularMarket_timestamp_formatted" : "2022/03/09 00:00:04",
"earningsTimestamp_formatted" : "2022/01/27 19:30:00",
"earningsTimestampStart_formatted" : "2022/04/26 23:00:00",
"earningsTimestampEnd_formatted" : "2022/05/02 23:00:00"
}
我想将时间戳转换为日期时间。
这是我的 JSON 输入:
{
"preMarket_timestamp": 1646830062,
"regularMarket_timestamp": 1646773204,
"earningsTimestamp": 1643301000,
"earningsTimestampStart": 1651003200,
"earningsTimestampEnd": 1651521600
}
我想要的 JSON 结果:
{
"preMarket_timestamp": "2022/03/09 16:09:26",
"regularMarket_timestamp": "2022/03/09 00:00:04",
"earningsTimestamp": "2022/01/27 19:30:00",
"earningsTimestampStart": "2022/04/26 23:00:00",
"earningsTimestampEnd": "2022/05/02 23:00:00"
}
是否有进行此转换的操作,或者我可以使用 Nifi 表达式语言进行转换吗?我卡在这里了。
不一定要用“/”分隔,也可以是“-”。
使用 ScriptedTransformRecord 处理器:
Record Reader
:JsonTreeReader
Record Writer
:JsonRecordSetWriter
Script Language
:Groovy
Script Body
:
import org.apache.nifi.serialization.record.RecordField;
import org.apache.nifi.serialization.record.RecordFieldType;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
def formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
formatter.setTimeZone(TimeZone.getTimeZone("Europe/Istanbul"))
record.setValue("preMarket_timestamp_formatted", formatter.format(new Date(record.getAsLong("preMarket_timestamp")*1000)))
record.setValue("regularMarket_timestamp_formatted", formatter.format(new Date(record.getAsLong("regularMarket_timestamp")*1000)))
record.setValue("earningsTimestamp_formatted", formatter.format(new Date(record.getAsLong("earningsTimestamp")*1000)))
record.setValue("earningsTimestampStart_formatted", formatter.format(new Date(record.getAsLong("earningsTimestampStart")*1000)))
record.setValue("earningsTimestampEnd_formatted", formatter.format(new Date(record.getAsLong("earningsTimestampEnd")*1000)))
return record
输出json:
{
"preMarket_timestamp" : 1646830062,
"regularMarket_timestamp" : 1646773204,
"earningsTimestamp" : 1643301000,
"earningsTimestampStart" : 1651003200,
"earningsTimestampEnd" : 1651521600,
"preMarket_timestamp_formatted" : "2022/03/09 15:47:42",
"regularMarket_timestamp_formatted" : "2022/03/09 00:00:04",
"earningsTimestamp_formatted" : "2022/01/27 19:30:00",
"earningsTimestampStart_formatted" : "2022/04/26 23:00:00",
"earningsTimestampEnd_formatted" : "2022/05/02 23:00:00"
}