JCLI诞生记(一)

简介: 前阵子[AliyunCLI](https://develop.aliyun.com/command/cli)开源,同时转变为社区维护软件,这让我第一次有了自己做一个CLI的想法,同时想改进一下CLI的内部实现方法

前阵子AliyunCLI开源,同时转变为社区维护软件,这让我第一次有了自己做一个CLI的想法,同时想改进一下CLI的内部实现方法:AliyunCLI为了判断产品的endpointAction名字,需要依赖对应产品的SDK,在日常的工单处理中,用户在安装SDK时出现的问题比较多,且由于对代码和SDK不甚了解,排查起来有些困难,所以就想做一个纯粹的CLI,他只负责两件事情:一是签名的计算;二是将参数拼接成URL,显示出来或者直接提交。
由于该工具使用Java编写,暂定名为JCLI。

公共参数Timestamp

这里的时间,并不是通常指的那个流逝的“时间”,而是人们定义的“时间”规则,如UTC、GMT等等国际上标准的时间表示和记录方法。阿里云API中,绝大部分产品都有“公共参数”这么一说,而其中也都有Timestamp这个参数,除了标识请求的时间以外,还有一个原因是为了防止中间人攻击,提高签名被猜出的难度。

根据阿里云的官方定义,这个值是请求时的UTC时间,日期格式按照ISO8601标准表示,当时搜了一下网上获取UTC时间的方法,发现五花八门,同时反编译了阿里云官方SDK,发现其中使用了以下的代码来获取UTC时间:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(new SimpleTimeZone(0, "GMT"));
return sdf.format(new Date());

时区ID

其中setTimeZone这个方法,还需要传入SimpleTimeZone这个对象,研究了一下发现使用TimeZone这个类的getTimeZone(String ID)也可以实现类似的方法,省去了一些开销,决定使用TimeZone。于是乎,需要先了解TimeZone工厂方法:TimeZone.getTimeZone。研究之后发现其中传入的getTimeZone这个方法的ID这个参数,查阅了JDK API,发现这个参数竟然可以传三种类型的参数:常规的地区/城市的格式(如America/Los_Angeles)、字母的时区简写(如CTS)和标准化的时间计算方法的名称(如GMT),可以传三种格式的时区字符串呀,很黄很暴力。由于对后两者传入方式不熟悉,打算使用完整的城市名称。联想到UTC时间,就是英国伦敦当地时间嘛,然后就去翻java的ZoneInfo文件,想找一下java关于地区/城市名字的定义,然后就在openjdk的文件夹(jdkmakesunjavazictzdata)里找到了描述文件,翻到了伦敦的完整名称:“Europe/London”。

DaylightSaving

当我开心的在SimpleTimeZone中填入Europe/London作为构造参数后,启动发现服务器总是提示Timestamp不对,比对了一下之前使用new SimpleTimeZone(0, "GMT")这种方式传入的时间,总是晚1个小时:

比正常情况下晚1小时

通过百度查询发现,伦敦地区的时间确实就是6点54分呀,为什么要求的时区要提早一个小时呢?百思不得其解,浏览的各种时区网站后,发现了一个重要的问题:夏令时!

2016年全球各地实施夏令时的情况

国外某些地区为了更好地利用白天的时间,会将时间延后1个小时或0.5个小时,当前伦敦正在处于夏令时状态,所以时间较UTC 0时区的时间会延后1个小时,而Timestamp这个参数只要求是UTC 0时区,忽略夏令时的特殊情况,那么直接使用TimeZone.getTimeZone("GMT+00")就可以拿到要求的UTC 0时区的时间了。

目录
相关文章
|
程序员 开发者
如何雇佣一名全民开发者?
这个岗位到底需要哪些技能?一个合格的候选人应该有哪些能力?这个工作需要四年的本科教育,还是在培训机构学习六个月就能胜任?
|
设计模式 前端开发 搜索推荐
细数国产接口协作平台的六把武器!
软件界发展至今,API(接口)的重要性日益凸显——不同的端,不同的模块都在通过API交互,不同角色的成员也都在围绕着接口展开工作。
|
小程序 前端开发 程序员
19 个接私活平台汇总升级版,你有技术就有钱
19 个接私活平台汇总升级版,你有技术就有钱
960 0
19 个接私活平台汇总升级版,你有技术就有钱
|
搜索推荐 数据可视化 BI
【氚云】佰荣名品家居借力氚云,升级企业管理之道
佰荣名品家居借力氚云,升级企业管理之道
183 0
【氚云】佰荣名品家居借力氚云,升级企业管理之道
|
数据可视化 安全 搜索推荐
【氚云】借力钉钉+氚云 南宁轨道交通集团2年开发104个应用
借力钉钉+氚云 南宁轨道交通集团2年开发104个应用
316 0
【氚云】借力钉钉+氚云 南宁轨道交通集团2年开发104个应用
|
敏捷开发 搜索推荐 项目管理
协同办公工具 Teambition 邀你来当“首席找茬官”
协同办公工具 Teambition 有奖招募 #首席找茬官#
951 0
协同办公工具 Teambition 邀你来当“首席找茬官”
|
物联网 开发者 芯片
报名 | 平头哥应用嘉年华,带上创意“趣”开发
平头哥应用嘉年华将秉持,多元、开放、乐趣、创新的理念,旨在激发物联网创意,汇聚开发人才,孵化商业成果。系列线上+线下的技术活动等你参加。
2246 0
报名 | 平头哥应用嘉年华,带上创意“趣”开发
浅谈短视频软件开发是如何搭上时代发展“快车”的
对于直播,小编相信大家都不陌生,茶余饭后打开直播观看似乎成为了人们必不可少的一项娱乐活动。而近几年来流行起来的短视频软件开发也逐渐占领了人们的休闲时间。
|
开发者 小程序 前端开发
这场骗局像极了爱情,阿里小程序“一云多端”用法律武器捍卫爱情 | 开发者必读(107期)
面对防不胜防的各种电信诈骗行为,法家云牵手支付宝与阿里云共同打造“云上法律服务平台”,通过简单易操作的支付宝小程序“法家云法律服务”提高法律服务的性价比,更好更有效的打击诈骗。
806 0