将 java.lang.double 转换为 org.joda.time.Instant
Converting java.lang.double to org.joda.time.Instant
我环顾四周。我是 Java 的新手,我正在尝试将 Double 转换为 Instant。用例适用于 Google Dataflow Java SDK。 Double 是我使用 TextIO 读取的文件中的 UNIX 时间戳。当我 System.out.println(row.get("timestamp"))
我确实得到了 UNIX 时间戳。当我执行 System.out.println(row.get("timestamp").getClass().getName())
时,我会得到 java.lang.double
。我所拥有的如下:
static class ExtractTimestamp extends DoFn<TableRow, TableRow> {
@Override
public void processElement(ProcessContext c) {
TableRow row = c.element();
Instant timestamp = (Instant) row.get("timestamp");
c.outputWithTimestamp(row, timestamp);
}
}
我得到的错误是:
java.lang.Double cannot be cast to org.joda.time.Instant
问题是我想将 double 的 UNIX 时间戳转换为 Instants,这样我就可以将它传递给 outputWithTimestamp
。我相信这应该是一个微不足道的问题,但我还没有找到解决方案。谢谢。
你不能 "cast" 一个 Double
到一个 Instant
。您需要将时间戳作为 constructor argument:
Instant timestamp = new Instant(((Number)row.getTimestamp("timestamp")).longValue());
这假定 "timestamp" 值以毫秒为单位。如果是秒,就乘以1000。
我环顾四周。我是 Java 的新手,我正在尝试将 Double 转换为 Instant。用例适用于 Google Dataflow Java SDK。 Double 是我使用 TextIO 读取的文件中的 UNIX 时间戳。当我 System.out.println(row.get("timestamp"))
我确实得到了 UNIX 时间戳。当我执行 System.out.println(row.get("timestamp").getClass().getName())
时,我会得到 java.lang.double
。我所拥有的如下:
static class ExtractTimestamp extends DoFn<TableRow, TableRow> {
@Override
public void processElement(ProcessContext c) {
TableRow row = c.element();
Instant timestamp = (Instant) row.get("timestamp");
c.outputWithTimestamp(row, timestamp);
}
}
我得到的错误是:
java.lang.Double cannot be cast to org.joda.time.Instant
问题是我想将 double 的 UNIX 时间戳转换为 Instants,这样我就可以将它传递给 outputWithTimestamp
。我相信这应该是一个微不足道的问题,但我还没有找到解决方案。谢谢。
你不能 "cast" 一个 Double
到一个 Instant
。您需要将时间戳作为 constructor argument:
Instant timestamp = new Instant(((Number)row.getTimestamp("timestamp")).longValue());
这假定 "timestamp" 值以毫秒为单位。如果是秒,就乘以1000。