从Scala研习Java的TimeZone库

本文源于学习Spark日期时间函数时对TimeZone的研究。探讨了java.util.TimeZone类,包括有效ID和自定义ID的区别,以及ID的各类形式。通过Scala REPL进行实验,分析了ID的组成和含义,如地名缩写、全名、已废弃时区等。
摘要由CSDN通过智能技术生成

Table of Contents

仅包含一个单词的ID

包含多于两个单词的ID

正好包含两个单词的ID


一切缘起于学习Spark的日期时间函数。其中的to_utc_timestampfrom_utc_timestamp函数会涉及到TimeZone的参数。在Spark的源码中追溯,会发现TimeZone的参数会传到源文件:spark/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/DateTimeUtils.scala,从而看到Spark实际上用了很多的Java有关时间的库。

...
import java.sql.{Date, Timestamp}
import java.time._
import java.time.Year.isLeap
import java.time.temporal.IsoFields
import java.util.{Locale, TimeZone}
import java.util.concurrent.TimeUnit._
...

于是需要学习这个库:java.util.TimeZone。参考其说明文档:https://docs.oracle.com/javase/8/docs/api/java/util/TimeZone.html。我们使用ID的字符串,通过函数getTimeZone得到相应的TimeZone:

TimeZone tz = TimeZone.getTimeZone(String ID);

而这里的String ID可以有两种形式

  • 一种是有效的ID,例如"America/Los_Angeles",能看出其意义。而这些字符串可以通过函数getAvailableIDs得到;
  • 一种则是自定义的ID(CustomID),就是以GMT开头的一定格式的时区表示。比较简单,参考上面的网页。在实际生成TimeZone的时候,自定义的ID会先转成正规化的自定义ID(NormalizedCustomID)。

现在来看getAvailableIDs得到的有效ID。注意到有效的ID字符串中会包含“/”字符,于是考虑以“/”划分的单词的个数来考察这些ID。而这个库与Spakr没有什么关系,我们可以在Scala的REPL<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值