JCLI诞生记(一)

前阵子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个小时:

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

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

时间: 2024-10-07 20:47:29

JCLI诞生记(一)的相关文章

设计案例分析:QQ公益图标诞生记

永不熄灭的爱心图标--腾讯公益月捐计划 "QQ首席图标"诞生记 腾讯"月捐计划"倡导爱心人士,通过每月小额捐款的形式,长期关注和支持公益项目.并和亿万爱心网友一起,每人每月1份爱,点滴付出,汇成爱海,形成强大公益合力,随时帮助需要帮助的人! "QQ公益图标"正式亮相,让QQ用户轻松实现献爱心的公益愿望. "月捐计划"的icon设计是一次重大的挑战,因为赋予它的意义非凡,被点亮后,将排列在迷你资料卡上的第一位,是QQ用户的&qu

张小龙的微信帝国诞生记

2010年11月20日这一天,在广州,一个六七人的产品小组正式组建.2011年10月1日,这个产品小组的一款产品登上了中国移动互联网即时通讯工具软件第一的位置. 这款产品叫"微信",主导了这款产品的人是张小龙,时任腾讯广州研发部总经理. 短短三年时间,微信几乎已经成为中国每一款智能手机上必然会被安装的应用,微信能有此影响力,不惟有腾讯这棵"参天大树"的庇护和输送养料,亦有赖于微信产品团队对产品的打磨.把控.而一直以来,张小龙,这个主导了中国时下最火的社交应用的中年男

云上开发者全新体验——OpenAPI Explorer诞生记

摘要: 本文的整理自2017云栖大会-南京峰会上阿里巴巴资深开发工程师黄俊华的分享讲义,讲义主要对于云上的开发工具进行了详细的介绍,先后介绍了SDK.API文档.Cli调试工具以及OpenAPI的相关知识,并着重对于OpenAPI Explorer进行了介绍. 在2017云栖大会-南京峰会上,阿里巴巴资深开发工程师黄俊华做了题为<云上开发者全新体验--OpenAPI Explorer诞生记>的分享.他在分享中对于云上开发工具中的SDK.API文档.Cli调试工具以及OpenAPI的相关知识进行

心情娃娃诞生记(恋爱娃娃)

六.恋爱娃娃 最后,让我们以一个浸沐在爱心中的娃娃来结束这篇文章. 1.打开最初的娃娃文件,另存为Loving.psd,将前景色设为RGB(255,134,197),用这种娇嫩的粉色填充图层Face的不透明区域. 2.将Eye L和Eye R拼合,复制,把副本向下移动,同时降低Eye L层的不透明度,在Eye L层中载入副本选区,删除,取消选择后删除副本层,恢复Eye L的图层不透明度.(图24) 图24 3.删除mouth层,复制Face层两次,将两个副本层填充不同的颜色以作区别,再分别做不同

Motion新视界:Qzone5.0大片儿诞生记

  为了让用户更加直观形象地感受产品的全新特征,我们特别定制了重量级的宣传大片儿.在设计风格的设定上,以当前最流行的 "Motion Graphic" 的形式,全方位凸显我们新版的酷炫范儿,可谓"动若脱兔,静若处子",立体化震撼你的视听感官. http://v.qq.com/page/c/p/v/c0144xtlcpv.html?start=1 那么,如此重量级的大片儿又是如何诞生的?设计师又是怎样披荆斩棘,攻克重重难关,为大家呈现饕餮盛宴的呢?接下来将为大家解读大

安全产品经理的思维模式 ——网站群治理平台诞生记

从红头文件到落地产品,一个备受青睐的安全产品是如何诞生的呢? "网站群治理平台叫好叫座,因为我们经历了一个从需求提炼到问题解决.从用户需求到用户体验的全过程."作为网站群治理平台的产品经理,来自WebRAY 的李春鹏谈起这个产品来非常自豪,因为"确实解决了问题,受到了用户的广泛好评." 一个文件引发的深度思考 "网络里到底有多少网站和业务系统?这些网站是否安全.合规?对于大量网站的管理如何才能便捷有效?"这些问题一直困扰着信息中心的运维人员.但是

《少年派的奇幻漂流》诞生记:一部电影,一段旅程

<少年 Pi 的http://www.aliyun.com/zixun/aggregation/9238.html">奇幻漂流>的原著作者 Yann Martel 曾 认为,这是一部无法被拍成电影的作品.直到 四年前,李安在 经过 激烈的思想斗争后接下这部片子,并在四年后的今天,将这部"世界上最难拍"的作品梦幻般呈现在大荧幕上. 而这场在观众眼前 127 分钟的奇幻冒险,对李安和整个创作团队而言,则是一场历时四年的漫长旅程.同漂流在太平洋中的少年 Pi 一样

iPhone诞生记:一场颠覆商业逻辑的狂奔

导语:美国网络杂志Slate周一发表署名法哈德·曼约奥(Farhad Manjoo)的文章称,虽然iPhone的众多元素事后看来似乎理所当然,但实际上,放在当时的历史背景下,很多都是具有革命意义的设计.不仅如此,对于当时的苹果而言,要推出这样一款产品,也需要具备非凡的勇气和魄力.第一部iPhone 以下为文章全文: 颠覆商业逻辑 与苹果的很多发明一样,iPhone来到这个世界上,不是带着愿景,而是带着问题.2005年,iPod超越Mac,成为苹果第一大收入来源,但这款救苹果于危难的音乐播放器却面

Dropcam诞生记:廉价远程监控解决方案

Dropcam网络摄像头Dropcam的诞生源于一个非常淳朴的想法.美国有一位名叫格雷格•达菲(Greg Duffy)的软件工程师,他的父亲遭遇了一件烦心事:邻居家的狗总是在他们的花园里随地大小便,却始终抓不到证据.于是,父亲准备自行搭设一个摄像头监控系统,却发现工场非常浩大,实现难度很高.达菲决心解决这个恶心事儿.他找来了好基友阿米尔•维拉尼(Aamir Virani),两人买回一个摄像头,拆开了仔细研究,并为之编写了软件.经过逆向工程重新组装的摄像头不仅能录像,还能通过手机等多种设备远程查看