Java Apache配置单元中的Unix\u时间戳
我正在尝试转换字符串日期“Sat Jan 25 00:13:31+0000 2014” 使用Unix_timestamp()HiveQL函数执行Unix Timestap 将具有给定模式的时间字符串转换为Unix时间戳(以秒为单位), 如果失败,则返回0:unix_时间戳('2009-03-20','yyyy-MM-dd')=1237532400 Java文档 配置单元中的unix_时间戳(“2014年1月”、“yyyy月”)返回空值 该函数似乎只适用于以整数(即MM)表示的月份。Java Apache配置单元中的Unix\u时间戳,java,date,time,hive,hiveql,Java,Date,Time,Hive,Hiveql,我正在尝试转换字符串日期“Sat Jan 25 00:13:31+0000 2014” 使用Unix_timestamp()HiveQL函数执行Unix Timestap 将具有给定模式的时间字符串转换为Unix时间戳(以秒为单位), 如果失败,则返回0:unix_时间戳('2009-03-20','yyyy-MM-dd')=1237532400 Java文档 配置单元中的unix_时间戳(“2014年1月”、“yyyy月”)返回空值 该函数似乎只适用于以整数(即MM)表示的月份。 解决方案?
解决方案?看似不可思议,但在除1月(1月)外的其他月份,它都能奏效
unix_timestamp('Feb 1 18:41:57 +0000 2014','MMM dd HH:mm:ss Z yyyy')
==> 1391280117
星期几的EEE模式不起作用…解决了,问题是我的linux系统的本地化。使用java.time 在Java方面,使用Java.time类进行解析。这个班级代表一年零一个月
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMM-yyyy" );
YearMonth ym = YearMonth.parse( "Jan-2014" , f );
从那以后,我们可以得到一个月的第一天
如果要为配置单元提供仅限日期的值,请以标准SQL格式提供字符串。对于仅日期值,SQL格式与格式一致。在解析或生成字符串时,java.time类默认使用标准ISO 8601格式
String output = today.toString(); // YYYY-MM-DD format per ISO 8601 standard.
显然,您需要一个日期时间值。我们可以任意分配一天中的第一个时刻。日期的含义和确定第一个时刻取决于时区。对于任何给定的时刻,一天中的日期和时间在全球各地因时区而异
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = today.atStartOfDay( z );
由此,您可以在UTC(1970-01-01T00:00:00Z
)中生成自1970年初以来的整秒数,以馈送到蜂巢
long secondsSinceEpoch = zdt.toEpochSecond();
1388534400
如果要转到另一个方向,则需要完成Instant
类。该类表示时间线上的一个时刻,分辨率为(小数点的九(9)位)
如果要查看某个区域的时间,请应用时区
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&
该项目现已启动,建议迁移到java.time
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释
大部分java.time功能都在中向后移植到java 6和7,并进一步适应于中(请参阅)
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如、、和
Instant instant = Instant.ofEpochSecond( 1_388_534_400L );
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );