Chr*_*row 2 java datetime date iso8601 google-bigquery
我有以下格式的 ISO 8601 日期字符串:
String myIsoDateString = "2019-02-27T23:00:00.000Z"
Run Code Online (Sandbox Code Playgroud)
我需要使用日期字符串作为我在 BigQuery 中运行的查询的一部分。我正在尝试使用com.google.cloud.bigquery.QueryParameterValue该类将其转换为 a QueryParameterValue,类型为timestamp,如下所示:
QueryParameterValue.timestamp(myIsoDateString)
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误:
java.lang.IllegalArgumentException: Invalid format: "2019-02-27T23:00:00.000Z" is malformed at "T23:00:00.000Z"
Run Code Online (Sandbox Code Playgroud)
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".
Run Code Online (Sandbox Code Playgroud)
如何转换myIsoDateString为所需的格式?我可以使用更好的方法来处理从 ISO 8601 字符串转换为 BigQuery 中的时间戳吗?
对于任何试图在 BigQuery 中解析 ISO 8601 的人(这篇文章是第一个谷歌结果),试试这个:
SELECT
PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%E*SZ', '2018-10-12T13:22:27.120Z')
Run Code Online (Sandbox Code Playgroud)
这有效:
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
Run Code Online (Sandbox Code Playgroud)
转换myIsoDateString为微秒并将其存储为long:
long myDateInMicroseconds = DateTime.parse(myIsoDateString).toDateTime(DateTimeZone.UTC).getMillis() * 1000;
Run Code Online (Sandbox Code Playgroud)
然后将其作为参数传递给 QueryParameterValue.timestamp:
QueryParameterValue.timestamp(myDateInMicroseconds)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3566 次 |
| 最近记录: |