如何在没有前导零的情况下转换配置单元中的日期

Posted

技术标签:

【中文标题】如何在没有前导零的情况下转换配置单元中的日期【英文标题】:How to convert a date in hive with no leading zeroes 【发布时间】:2021-05-20 12:05:34 【问题描述】:

我有一个字符串列,其值类似于 '5/1/21' , '5/14/21' 格式为 day/month/year ,但列值没有前导零,例如 ' 21 年 5 月 1 日','21 年 5 月 14 日'

我试过了

select from_unixtime(unix_timestamp('5/15/21','MM/DD/YY'),'DD-MM-YYYY')
from  dev_irloi_wrk.Final_Ryder_data

但它给出了像“2021-12-27”这样的值 我无法理解 12 和 27 来自哪里以及如何获得格式 '2021-05-14' 、 '2021-05-01'

谁能帮帮我。

【问题讨论】:

5/14/21 不是日/月/年。 尝试使用'M/d/y' 我的意思不是 'day' 'month' , 'year' 但 5 代表第 14 个月和第 21 年 @GordonLinoff 谢谢你的工作,但是'M/d/y'的逻辑是什么,我可以知道 @Chandu 。 . .它遵循 Hive 使用的模式的规则。我不知道你从哪里得到你的格式,但是 Hive 格式(真的是 Java)是有据可查的。 【参考方案1】:
select from_unixtime(unix_timestamp('5/15/21','mm/dd/yy'),'mm/dd/YYYY');
+-------------+
|     _c0     |
+-------------+
| 05/15/2021  |
+-------------+
1 row selected (0.397 seconds)

【讨论】:

欢迎来到 SO;请花点时间看看如何正确格式化您的代码 sn-ps(这次为您完成)。【参考方案2】:

Hive 使用 SimpleDateFormat。 此处记录了日期和时间模式:SimpleDateFormat

使用M/dd/yyM/d/yy,大小写很重要。

yyy - 年份解析逻辑:

对于使用缩写年份模式(“y”或“yy”)进行解析, SimpleDateFormat 必须解释相对于某些年份的缩写年份 世纪。它通过将日期调整到 80 年前 以及创建 SimpleDateFormat 实例后的 20 年。 例如,使用“MM/dd/yy”模式和 SimpleDateFormat 实例创建于 1997 年 1 月 1 日,字符串“01/11/12”将是 解释为 2012 年 1 月 11 日,而字符串“05/04/64”将是 解释为 1964 年 5 月 4 日。

【讨论】:

以上是关于如何在没有前导零的情况下转换配置单元中的日期的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中获取带有前导零的整数中的位数?

如何在配置单元中将字符串数据类型列转换为日期格式

不带前导零的日期时间对象

如何在 Python 3 中用前导零填充字符串 [重复]

使用 to_char 函数解析为字符串时,如何从 Oracle 中的日期和月份值中删除前导零?

如何在 JavaScript 中输出带有前导零的数字? [复制]