编程

旧金山湾区时间与北京时间转换,用Javascript方便地实现时区转换例子

在当今这个服务全球化时代,时区转换是使用各种编程语言时经常遇到的问题。之前的这篇文章讲了Python实现时间在不同时区的换算,本文讲一下怎样用Javascript实现。多亏了moment.js这个库,时区转换实现非常直观方便,比Python的pytz好用点。Google出来排名前几名的文章感觉并不满意,所以在这总结分享一下,以便需要的时候很容易找到end to end能工作的例子。 从上面例子可以看到,真的非常简单,基本就是一个moment对象调用tz函数,参数为新时区的名字,就生成了表示新时区时间一个新的moment。可以用format打印出来来验证其准确性。 在Chrome浏览器验证 Javascript的好处就是有个浏览器就可以跑,不需要设置什么环境。验证上面代码可以打开moment.js的官网,打开developer tool的console, 注意,一定要在这个网站下打开developer tools,这样moment会在浏览器环境里,在其他网站下打开会找不到moment。 运行上面代码如下 已知湾区时间(-0700)比北京时间(0800)晚15小时,所以上面结果是正确的。moment(sftime)是创建一个copy,如果用sftime.tz(‘Asia/Shanghai’)就会改变sftime这个对象本身的内容,而我们想新建一个bjtime的对象存放北京时间。 建立一个HTML文件来运行代码 如果需要在本地建立一个HTML,可以把moment.js和moment-timezone-with-data.js下载下来,放在和将要创建的test_moment.html文件放一起。编辑test_moment.html如下: 在Chrome打开test_moment.html可以看到空白页面。打开developer -> Javascript Console可以看到结果

旧金山湾区时间与北京时间转换,用python实现时区转换例子

San Francisco Time ?? Beijing Time ?? 把一个时区的时间,比如湾区9:00am,转换成另一个时区的时间,比如北京/香港/新加坡时间,应该是很简单的问题。用Python做时区转换好像挺麻烦的,容易出错。Google出来的前几条结果都不是很让人满意,本文总结我测试过可靠可行不太复杂的方法,以及一些容易出错的地方。 先上可行的Python例子,把三藩(SF)湾区时间9am, 转换成对应的北京时间,用了datetime和pytz。先构造一个湾区时间的对象,然后转化成北京/香港/新加坡时间。 加上注解和debug信息。 可以看到建立的湾区时间时区为-0700而北京时间为0800,可以验证湾区和中国时差为15小时。 时区行话解释 全球标准时间用的是位于英国的格林威治时间(GMT, Greenwich Mean Time)。因为以前格林威治天文台是世界中心,本初子午线或者0度经线就定义为穿过它的经线。然后又有了一个叫世界协调时间的东西(UTC, Coordinated Universal Time)。这个和GMT基本一致,大概就是北京话和普通话的区别吧。北京在Greenwich的东边,时间领先GMT/UTC 8小时,所以叫东八区,代号0800。而湾区在格林威治的西边,时间滞后7个小时(美国国会通过了永久使用夏令时法案),所以叫西7区,代号-0700。而两地时差为7+9=15,北京时间比湾区时间领先15个小时。 同理,日本和韩国位于东9区,代号为0900,那么时间就比为与东八区的中国早1小时。 当地真实时间和约定标准时间 一个地方的真实时间只取决于太阳相对当地的位置,也就是取决于当地经度。但是为了方便,每个国家可以人为规定用什么时间。比如整个中国虽然跨了几个纬度,确人为规定了各地都使用北京时间。新加坡真实时间应该为0655,确规定使用0800,也许是和大中华区保持一致比较方便。 回到Python上,这也正是pytz包的一些坑的来源。pytz用的是地理意义上的真实时间,而人们真正使用的是当地法律约定的时间,这两者是有差别的。 Python datetime不设时区是什么时间? 如果新建一个datetime对象,不设时区的话,会是当地时间。 用epochconverter转换1656658800.0,正是湾区时间2022-07-01 00:00:00 如果replace了timezone,就把底下的timestamp变了,而不是保持timestamp而改变时间表示形式(日期,小时/分/秒)。所以replace(tzinfo=…)并不是做时区变换。而且注意下面例子里上海时间是0806,并不是0800,应该用了地理意义上的真实时间而不是法定时间。这个地理时间在生活中基本没用,这个pytz的坑之一。 参考 Python3中datetime时区转换介绍与踩坑 python datetime时区转换 技巧:用datetime模块处理时区转换,不要用time模块 将UTC、EST时区的时间转化成北京时间(python) pytz库时区的坑(转) The Solution…
Read more

Python Pathlib生存手册,几个短例子极速上手

Pathlib是Python里自带的处理OS路径的library,功能非常强大,可以代替原来的os.path。本文提供几个简单的例子供查询,帮您极速上手,引用到自己的python project里。 创建操作Path对象例子 可以用”/“直接得到下一层目录或文件的Path对象 Home Path对象例子 需要注意的是,Path constructor的参数不认识~。需要用Path.home()。 验证tilda不work 验证Path.home() work 当前目录例子 如果需要当前目录的对象可以用cwd函数或者.加resolve函数 遍历文件夹例子 也就是implement bash命令 用pathlib实现如下 外面函数python_find接受path string,里面的递归函数_python_find接受pathlib.Path object。用iterdir列出当前input path下的所有对象,先打印它们的路径,如果是目录,就继续调用递归函数_python_find打印下一层目录里面的内容。 Pathlib删除文件例子 删除文件 删除目录/文件夹 rmdir只能删除空的文件夹/目录,如果内部还有其他文件或目录会报错。 删除非空目录/文件夹 这个只能自己用上面两个函数用递归实现。这里我增加了显示被删除文件size的信息。 参考 一分钟学一个 Python 标准库之 Pathlib PathLib recursively remove directory? pathlib — Object-oriented filesystem paths…
Read more

CSS 格子layout例子

1 2 3 4 5 6 7 CSS代码 HTML代码 padding是div内部内容和div格子上下左右边界的距离 display: grid 决定了内部div (“inner” class)从左到右排练,如果不用,每个div各占一行 grid-template-columns 决定了一行放几个内部div,和每个内部div宽度,可以是%也可以绝对距离 boarder用来debug,显示格子边界大小 用鼠标选中格子里两行,cmd+c,cmd+v 复制黏贴到编辑器里,出了还是一个一行,打横显示是浏览器的特效。

修复 wordpress 中文繁简转换插件的问题

给网站添加了WP Chinese Conversion,可以进行简体繁体转换了。 目前这个WP Chinese Conversion插件的版本是1.1.16,已经5年没更新了。PHP升级后有了些变化,于是这个插件就有了些error/warning。自己动手将就改了一下,修改都在wp-chinese-conversion.php,把error/warning fixed了。本文记录一下。 each function被新版PHP给deprecated了 把这用到each的代码,比如这个 改成 create_function也被PHP给deprecated了 把用到create_function的地方改成anonymous function,比如这段 改成 总结 修改这两function用到的地方后,就正常工作了。

PHP随手笔记 array和hashtable,打印,REPL,While Loop

自己运营wordpress网站,而wordpress是用PHP开发的,遇到问题就看看代码,所以时不时也得学点PHP,记点笔记。 PHP的array也是hashtable array的index是从0开始的连续的数字,而hashtable的index是任意东西。逻辑上确实可以用hashtable实现array。但是物理上一般array内存空间是连续的,不知道PHP怎么实现。以后可以看看。 打印 print_r($some_object)可以打印object,而echo $some_string只能打印string REPL 本地 online可以用replit.com。我的本地版本是8,需要用7,测试一个叫each的function,8已经淘汰掉这个function了。目前replit还是7,可以测试。 While Loop例子

怎样备份部署在EC2上的WordPress站点

手动备份 备份网页部分(html, php),这部分不需要经常备份,如果没修改code或者更新plug,主题之类的 备份MySQL,这部分需要更频繁,所有的内容都在database里 sudo mysqldump -u <db user> -p –databases <db1> [db2, db3…] > <db backup filename>.sql 然后可以sftp复制到本地或者上传到s3之类的cloud storage里。 备份Script 编辑 backup_db.sh 文件如下 编辑 backup_html.sh 文件如下 以后需要backup的时候运行这两文件即可

算法练习 Leetcode 力扣 1293 Shortest Path in a Grid with Obstacles Elimination 解法

问题 题目在这。 解题思路 格子题,从左上到右下需要的最小步数。难点在给了个预算k,最多可以穿墙k次。找距离需要用BFS,不走回头路就可以,比较简单。但是这题在空间上是有可能走回头路的,因为除了空间以外,还多了个状态是已经穿墙几次。放到queue里面的应该是(坐标,穿墙次数)的tuple。所以关键在于不要把相同(坐标,穿墙次数)放queue里,不然会无法停止。 Python解法

关于Mac OS Monterey上的Apache/httpd的笔记

路径,可以用which httpd确定 版本 重启httpd, 加-k会有更多信息。比如PHP需要code sign,不加就不告诉你 在Monterey里,加载PHP需要code sign。可以参考这篇文章。 如果PHP版本更新了,比如用了brew update,那么需要对新版本的libphp 进行 code sign。 如果Mac电脑重启了,也需要codesign,比如 需要根据php安装改变上面libphp.so的路径。有时Mac上面用brew安装的php升级了,也需要修改上面的<php version>。 查找apache2 config 里面用的libphp.so地址 在Mac OS里,apache2 conf的可能路径是/etc/apache2/httpd.conf,可以用sudo权限编辑 Document root路径 Config file (配置文件)路径 log (日志)路径 本文链接