我有一个ISO 8601日期字符串,格式如下:
String myIsoDateString = "2019-02-27T23:00:00.000Z"
我需要使用日期字符串作为我在BigQuery中运行的查询的一部分。我正在尝试使用<code>com.google.cloud.bigquery。QueryParameterValue类将其转换为类型为时间戳
的QueryParameterValue
,如下所示:
QueryParameterValue.timestamp(myIsoDateString)
这给了我一个错误:
java.lang.IllegalArgumentException: Invalid format: "2019-02-27T23:00:00.000Z" is malformed at "T23:00:00.000Z"
Eclipse中时间戳方法的内联帮助声明:
Creates a QueryParameterValue object with a type of TIMESTAMP. Must be in the format"yyyy-MM-dd HH:mm:ss.SSSSSSZZ", e.g. "2014-08-19 12:41:35.220000+00:00".
如何将 myIsoDateString
转换为所需的格式?有没有更好的方法可以使用来处理从ISO 8601字符串到BigQuery中的时间戳的转换?
我希望Felipe Hoffa的答案能起作用,给你你想要的:用空格代替<code>T。这里还有一些其他的建议。
明确:虽然留档给出了一个非常清晰的预期字符串示例,但从错误消息和留档(下面的链接,但您已经在Eclipse中获得了它)中不清楚QueryParameterValue.timestamp
是否接受Z
作为偏移量。如果我们想确定并更明确地提供所要求的格式(对于在您之后管理您的代码的人来说总是好的):
DateTimeFormatter timestampFormatter
= DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss.SSSSSSxxx");
String myIsoDateString = "2019-02-27T23:00:00.000Z";
OffsetDateTime dateTime = OffsetDateTime.parse(myIsoDateString);
QueryParameterValue.timestamp(dateTime.format(timestampFormatter));
这会将字符串 2019-02-27 23:00:00.000000 00:00 传递给
时间戳
。
传递一个 long:时间戳
出现在一个重载版本中,采用 Long
参数。同样,它没有记录长整线值应该是什么。编辑:你自己的答案显示,时间戳(长)
自纪元以来需要微秒。完全正确的转换方法没有任何不必要的精度损失的风险是:
String myIsoDateString = "2019-02-27T23:00:00.000Z";
Instant dateTime = Instant.parse(myIsoDateString);
long microsecondsSinceEpoch = TimeUnit.SECONDS.toMicros(dateTime.getEpochSecond())
+ TimeUnit.NANOSECONDS.toMicros(dateTime.getNano());
QueryParameterValue.timestamp(microsecondsSinceEpoch);
值 1 551 308 400 000 000 将传递到时间戳
。
免责声明:我不是BigQuery用户。
QueryParameterValue
留档对于任何只是试图在BigQuery中解析ISO 8601的人(这篇文章是第一个Google结果),请尝试一下:
SELECT
PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%E*SZ', '2018-10-12T13:22:27.120Z')
在我的数据集中,我有一个变量< code>duration,其中有200万行< code>ISO 8601格式的数据。示例格式:< code>PT21S或< code>PT5M29S,< code>PT1M16S 我在将此字符串变量转换为时间时遇到问题。目前我正在使用查询: 通过该查询,可以区分持续时间是小时、分钟还是秒。我想将字符串持续时间转换为时间。我用过Regex和cast,但没有成功。当我
问题内容: 如何将以下格式转换为Unix时间戳? 我从数据库获得的格式似乎最后有。我尝试使用以下方法,但没有用: 问题答案: 试试这个查询 此查询
如何将以下格式转换为unix时间戳? 我从DB获得的格式似乎末尾有。我尝试使用以下方法,但没有成功:
问题内容: 我有一个表示Python中的unix时间戳(即)的字符串,我想将其转换为可读的日期。使用时,我得到: 问题答案: 使用模块:
问题内容: 使用PHP,我想将UNIX时间戳转换为类似于以下内容的日期字符串: 如何转换的时间戳,如到? 问题答案: 尝试这样:
问题内容: 我在mysql中使用NOW()获取当前日期和时间。我想将日期值转换为varchar并将其与另一个字符串连接。我该怎么做? 问题答案: 使用DATE_FORMAT()