Pig 脚本到日期转换问题导致不同的输出

Posted

技术标签:

【中文标题】Pig 脚本到日期转换问题导致不同的输出【英文标题】:Pig Script toDate convertion issue resulting different output 【发布时间】:2017-05-24 11:18:26 【问题描述】:

如何使用 PIG 转换日期和时间?我正在尝试转换不转换为 24 小时格式输入值

30/06/2016 02:43:23 PM 01/12/2016 12:43:23 AM

通过ToDate($0,'dd/MM/yyyy hh:mm:ss aa')后 结果是

30/06/2016 02:43:23.324+05:30 01/12/2016 12:43:23+05:30

但期望结果为

30/06/2016 14:43:23 01/12/2016 12:43:23

谁能帮我解决这个问题

【问题讨论】:

【参考方案1】:

参考: http://pig.apache.org/docs/r0.12.0/func.html#to-date ToDate 的返回类型是 DateTime 对象。

要将 chararray 日期转换为任何其他格式,则必须在获取 DateTime 对象后使用 ToString() 函数。

输入:a.csv

30/06/2016 02:43:23 PM
01/12/2016 12:43:23 AM

猪脚本:

adataset = LOAD 'a.csv' USING PigStorage(',') AS (display_date:chararray);
req = FOREACH adataset GENERATE ToString(ToDate(display_date,'dd/MM/yyyy hh:mm:ss a'),'yyyy/MM/dd HH:mm:ss'); 
DUMP req;

【讨论】:

Murali 非常感谢您的帮助....它工作得很好!!!!!!是否可以将日期时间(如 30/06/16 02:43:23 PM 01/12/17 12:43:23 AM)转换为 (30/06/2016 14:43:23) (01/12/2016 00: 43:23) @dass :您必须相应地指定格式,检查 - docs.oracle.com/javase/6/docs/api/java/text/… 以了解如何指定格式。对于您的示例 dd/MM/yy 应该可以工作。 我必须分别获取日期、年、月和分钟、秒、小时以需要更改日期时间的格式 yyyy-mm-dd hh:mm:ss,我已经完成拆分字符串 get哪个进入其他关系???是否可以执行相同的生成语句。请在下面的评论中找到我想要做的相同代码 完成 = foreach tmp 日期 = ToDate($8,'MM/dd/yyyy HH:mm:ss');年份 = (chararray)ABS(GetYear(date));月 = (chararray)ABS(GetMonth(date)); day = (chararray)ABS(GetDay(date));小时 = (chararray)ABS(GetHour(date)); min = (chararray)ABS(GetMinute(date)); sec = (chararray)ABS(GetSecond(date));生成 $0,CONCAT(CONCAT(CONCAT(CONCAT(year, '-'), CONCAT(month, '-')),day),CONCAT(' ',CONCAT(CONCAT(CONCAT(hour, ':'), CONCAT (min, ':')),sec))),,$33,$22,$2,$3,$17,$18,$21; @dass :如果需要 - 作为分隔符,然后以 ToString 方法的格式指定相同的分隔符。检查更新的答案。

以上是关于Pig 脚本到日期转换问题导致不同的输出的主要内容,如果未能解决你的问题,请参考以下文章

Java中从字符串到sql日期的日期转换给出不同的输出? [复制]

Java & Pig - 是不是可以将 pig 脚本的输出转换为 Java 变量?

try_cast 和 cast 不同的结果。将日期数据类型转换为日期时间数据类型导致值超出范围

[java工具类01]__构建格式化输出日期和时间的工具类

猪在 3 月份给出错误结果的天数

字符串到日期格式转换导致 NULL - Databricks