05-09t09:00:12.123462000中的日期转换为配置单元中的unix时间戳

voase2hg  于 2021-06-28  发布在  Hive
关注(0)|答案(3)|浏览(406)

我想将'2015-05-09t09:00:12.123462000'格式的日期转换为配置单元中的unix时间戳。unix\u时间戳('2015-05-09t09:00:12.123462000')不起作用。我不知道怎样才能转换这个。我需要这个来比较两个不同格式的日期。我正在将这两个日期转换为unix时间戳,但失败了。有人能帮忙吗。
谢谢

t5fffqht

t5fffqht1#

如果可用,您可以简单地使用以下语法
1) 检查您的配置单元安装中是否有可用的UDF?

show functions;

2) 如果从\u unixtime()函数中看到,则:

from_unixtime(your_timestamp_field)

这将解决问题!
请添加评论,如果你喜欢我的答案!

0yg35tkg

0yg35tkg2#

萨姆森·沙尔夫里希特的回答是正确的,应该被接受。我只想添加一些关于java.time类型的词。

在字符串之间转换↔ java.time.instant文件

time类取代了旧的遗留日期时间类,例如 java.sql.Timestamp .
这个 Instant 类表示时间线上的一个时刻(utc),分辨率为纳秒(最多九(9)位小数)。
您的输入字符串符合iso 8601标准。在解析/生成表示日期时间值的字符串时,java.time类默认使用iso8601格式。所以不需要指定格式化模式。可以直接将字符串解析为 Instant 对象。
输入字符串缺少与utc或时区的偏移指示。如果计划使用utc格式,请附加 Z 为了 Zulu 意思是utc。

Instant instant = Instant.parse( "2015-05-09T09:00:12.123462000" + "Z" );

您只需调用 toString . 使用的默认格式设置程序 toString 根据需要按三位数一组打印小数。在本例中,最后三位数字为零,因此省略。

String output = instant.toString();

2015-05-09t09:00:12.123462z
要将其转换为配置单元所期望的sql样式字符串,请替换 T 并移除 Z .

String inputForHive = output.replace( "T" , " " ).replace( "Z" , "" );

2015-05-09 09:00:12.123462

从数字转换

配置单元还提供以下转换:
整数
从1970 utc开始的unix/posix纪元算起的整秒数( 1970-01-01T00:00:00Z ).
浮点数
与上述相同,但分秒分辨率高达纳秒。
第二个我建议你避免。浮点类型,例如 float , Float , double ,和 Double 在java中,为了更快的执行时间,有目的地牺牲准确性。这通常会导致小数点后面出现多余的数字。如果需要分数秒,请使用字符串类型& Instant 对象。
第一个可以很容易地从 Instant 打电话给 getEpochSecond 方法。当然,这意味着数据丢失,因为这种方法会留下任何分数秒。

long secondsSinceEpoch = instant.getEpochSecond();

往另一个方向走。

Instant instant = Instant.ofEpochSecond( secondsSinceEpoch );

比较

一旦你有了 Instant 对象,可以与 compareTo , equals , isBefore , isAfter .

Boolean happenedBefore = thisInstant.isBefore( thatInstant );

关于java.time

java.time框架内置于Java8及更高版本中。这些类取代了诸如 java.util.Date , .Calendar , & java.text.SimpleDateFormat .
现在处于维护模式的joda time项目建议迁移到java.time。
要了解更多信息,请参阅oracle教程。和搜索堆栈溢出的许多例子和解释。
大部分java.time功能都是通过threeten backport向后移植到Java6和Java7,并通过threetenabp进一步适应android(请参阅如何使用…)。
threeten额外的项目用额外的类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter ,等等。

jvidinwx

jvidinwx3#

您的输入使用完整的ISO8601格式,日期和时间之间有一个“t”和小数秒。hive需要sql格式(即日期和时间之间有空格),如中所示 java.sql.Timestamp 以及odbc,有或没有分秒,如hive文档中所述。
只需应用一些非常基本的字符串按摩-然后“投”的 String 去 hive Timestamp . 请忘记往返unix的时间戳:

cast(regexp_replace('2015-05-09T09:00:12.123462000', 'T',' ') as Timestamp)

相关问题