创建新的日期格式

Posted

技术标签:

【中文标题】创建新的日期格式【英文标题】:Create a new Date format 【发布时间】:2018-06-11 12:49:50 【问题描述】:

我有一个包含 MM/dd/yyyy 格式的日期字段的数据集,我的目标是创建一个具有相同日期格式但具有时间戳格式的表(最后,应该有一个执行日期的选项函数,如果是 int 或 string 日期函数将不起作用。)

我尝试过的事情: 我的栏目名称:as_of_date

1) cast(unix_timestamp(as_of_date, "MM/dd/yyyy") 作为时间戳) i/p -> 01/03/2006,o/p ->2006-01-03 00:00:00 问题 - 我不希望输出中有额外的零。 substr 不适用于日期函数

2) 如果我将值保留为字符串,日期函数将不起作用。 天('01/03/2006') 输入:'01/03/2006',输出:null(但预期为 3)

您能否帮我一个已经存在的日期格式,或者帮我为我的逻辑创建一个新的日期格式。

【问题讨论】:

【参考方案1】:

尝试一次

使用 unix_timestamp 函数匹配您的 输入日期格式 然后使用 from_unixtime 函数更改 输出格式 然后转换为 date 类型。

hive> select date(from_unixtime(unix_timestamp("03/06/2018", "MM/dd/yyyy"),"yyyy-MM-dd"));
+-------------+--+
|     _c0     |
+-------------+--+
| 2018-03-06  |
+-------------+--+

在 Impala 中:

hive> select from_unixtime(unix_timestamp("03/06/2018", "MM/dd/yyyy"),"yyyy-MM-dd");
+-------------+--+
|     _c0     |
+-------------+--+
| 2018-03-06  |
+-------------+--+

【讨论】:

谢谢@shu 我在 Hive 中试过,效果很好。蜂巢>选择日期(from_unixtime(unix_timestamp(“03/06/2018”,“MM/dd/yyyy”),“yyyy-MM-dd”)); OK 2018-03-06 但是当我在 Impala 中尝试相同的操作时,我收到一条错误消息: [impala] > select date(from_unixtime(unix_timestamp("03/06/2018", "MM/dd/yyyy"),"yyyy -MM-dd"));错误:AnalysisException:第 1 行中的语法错误:遇到:预期日期:ALL、CASE、CAST、DISTINCT、EXISTS、FALSE、IF、INTERVAL、NOT、NULL、STRAIGHT_JOIN、TRUNCATE、TRUE、IDENTIFIER 原因:异常:语法错误 在 impala 中尝试不转换为日期类型 select from_unixtime(unix_timestamp("03/06/2018", "MM/dd/yyyy"),"yyyy-MM-dd"); 所以在创建表时我需要正确提及这些方式: from_unixtime(unix_timestamp(column name, "MM/dd/yyyy"),"yyyy-MM-dd");它会起作用吗?或需要进行任何修改 谢谢,昨天我做了一些分析,发现 from_unixtimestamp 会产生一个字符串 :( 我不能应用日期函数。我要应用日期函数,输出格式应该是 yyyy- MM-dd。你能帮帮我吗。@Shu 使用带有 yyyy-MM-dd 00:00:00.0 格式的时间戳,然后加载数据。在检索数据时,使用 to_date() 仅从时间戳列中提取日期。

以上是关于创建新的日期格式的主要内容,如果未能解决你的问题,请参考以下文章

使 Django forms.DateField 显示使用本地日期格式

JDK8 日期格式化

Java日期时间API系列33-----Jdk8中java.time包中的新的日期时间API类应用,格式化常用模板大全,新增Excel常用格式。

JAVA8新的时间与日期 API- 传统时间格式化的线程安全问题

无法快速更改旧日期格式的新日期格式?

Excel怎样设置输入日期后提醒是节假日