Spring中的aware接口详情
355
2022-08-30
Python3教程:在python/Shell/MySQL中时间获取与格式转换的方法总结
时间的获取及时间各格式间的转换是比较常用的操作,但一是多种语言经常容易弄混,二是同一种语言同一个功能可能有不同的实现函数,导致每次处理时间经常要百度所以来记录一下。
另外个人真不喜欢同样功能有多种写法的形式,从理想角度说多种实现方式让不同的人都能以其喜欢的方式进行编写;但实际上当你忘记的时候,你就总要怀疑是不是这么写、可不可以这么写、到底怎么写,然后到网上看又是五花八门的写法,这是个很耗费精力的事情。这也是我不喜欢Ruby的原因。
一、Python时间操作
1 获取时间对象
import timeimport datetime# 获取当前时间对象# 返回形如datetime.datetime(2020, 2, 29, 10, 34, 36, 799216)对象# 可通过对象的year、month、day、hour、minute、second、microsecond、tzinfo等属性获取各部分的信datetime.datetime.now()datetime.datetime.today()# 获取昨天时间对象。当前时间减去一天的时间差即可# 接受参数weeks,days,hours,seconds,minutes,microseconds,milliseconds,且可同时使用# 返回形如datetime.datetime(2020, 2, 28, 10, 37, 31, 470867)datetime.datetime.now() - datetime.timedelta(days=1)# 获取明天时间对象。当天的时间加上一天的时间差即可# 接受参数weeks,days,hours,seconds,minutes,microseconds,milliseconds,且可同时使用# 返回形如datetime.datetime(2020, 3, 1, 10, 37, 31, 470867)datetime.datetime.now() - datetime.timedelta(days=1)
2 时间对象与给定格式转换
import timeimport datetime# 时间对象输出成指定格式# 输出形如2020-02-29 11:03:29(-空格和:等符号可以换成其他任意自己想要的字符)obj = datetime.datetime.now()obj.strftime("%Y-%m-%d %H:%M:%S")obj.__format__("%Y-%m-%d %H:%M:%S")# 给定时间转成时间对象datetime.datetime.strptime("2020-02-29 11:03:29", "%Y-%m-%d %H:%M:%S")
3 时间对象与时间戳转换
import timeimport datetime# 时间对象转成时间戳# 结果形如1582943851.470867obj = datetime.datetime.now()obj.timestamp()# 时间戳转成时间对象datetime.datetime.fromtimestamp(time.time())
4 时间的比较
import timeimport datetime# 单纯地比较大小可以直接比较。# 执行太快了两个对象是一样的,所以睡眠一下obj_a = datetime.datetime.now()time.sleep(1)obj_b = datetime.datetime.now()if obj_b > obj_a: print("yes")# 要获取具体时间差,可将转成时间戳再相减obj_a = datetime.datetime.now()time.sleep(1)obj_b = datetime.datetime.now()if obj_b > obj_a: late = obj_b.timestamp() - obj_a.timestamp() print(f"obj_b is late than b: {late}")
二、Shell时间操作
1 基础操作
# 获取当前时间,并输出成指定格式# 有引号是因为有空格,没有空格用不用引号都一样date +"%Y-%m-%d %H:%M:%S"# 获取昨天时间,并输出成指定格式date -d "yesterday" +"%Y-%m-%d %H:%M:%S"date -d "last-day" +"%Y-%m-%d %H:%M:%S"date -d "1 day ago" +"%Y-%m-%d %H:%M:%S"date -d "-1 days" +"%Y-%m-%d %H:%M:%S"# 获取明天日期,并输出成指定格式date -d "tomorrow" +"%Y-%m-%d %H:%M:%S"date -d "next-day" +"%Y-%m-%d %H:%M:%S"date -d "+1 days" +"%Y-%m-%d %H:%M:%S"# 将给定日期输出成指定格式date -d "2020-07-22 09:09:09" +"%H:%M:%S %Y-%m-%d"# 将timestamp转成指定日期格式date -d @1640162812 +"%Y-%m-%d %H:%M:%S"
2 date月份设置成中/英文问题
%b表示以系统所设置语言的月份简写,如"Aug";%B当地语言全称,如"August"。
但这个“系统设置语言”到底是由哪个配置设置呢?之前以为是LANG,LANG设置成"zh_CN.UTF-8"就是中文,date +“%b"就会输出“8月”;设置成"en_US.UTF-8"就是英文,date +”%b"就会输出“Aug”。
之前也收到反馈说LANG设置成了"en_US.UTF-8",date +"%b"仍输出中文“8月”,并不太上心,但今天自己也遇到了这个情况。
通过查找资料和实验,发现环境变量的优先级是LC_ALL > LC_*(包括决定月分显示语言的LC_TIME)> LANG。所以当LC_ALL设置成"zh_CN.UTF-8"时去设置LANG为"en_US.UTF-8",date +"%b"仍输出中文。
# 月份以英文形式输出。%b缩写,%B全称LC_ALL=C date -d "2020-07-22 09:09:09" +"%b"# 查看各影响编码的环境变量的当前值locale# 查看系统支持的全部编码locale -a
三、MySQL时间操作
1 MySQL获取时间
'''学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!'''# 获取当天日期select curdate();获取昨天日期select date_sub(curdate(),interval 1 day);获取明天日期select date_sub(curdate(),interval -1 day);# 获取当前时间select now();# 获取一个小前时间select date_sub(now(),interval 1 hour);# 获取一个小时后时间select date_sub(now(),interval -1 hour);# 获取昨天时间select date_sub(now(),interval 1 day);# 获取明天时间select date_sub(now(),interval -1 day);
2 时间输出成指定格式
# 当前时间输出成给定格式select date_format(now(),"%Y%m%d %H:%i:%S");# 给定时间输出成指定格式select date_format(date_sub(curdate(),interval 1 day),"%Y%m%d");select date_format(date_sub(now(),interval 1 hour),"%Y%m%d %H:%i:%S");
3 获取时间戳
select unix_timestamp(now());
四、附Python时间格式
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~