Python3教程:在python/Shell/MySQL中时间获取与格式转换的方法总结

yizhihongxing

时间的获取及时间各格式间的转换是比较常用的操作,但一是多种语言经常容易弄混,二是同一种语言同一个功能可能有不同的实现函数,导致每次处理时间经常要百度所以来记录一下。

另外个人真不喜欢同样功能有多种写法的形式,从理想角度说多种实现方式让不同的人都能以其喜欢的方式进行编写;但实际上当你忘记的时候,你就总要怀疑是不是这么写、可不可以这么写、到底怎么写,然后到网上看又是五花八门的写法,这是个很耗费精力的事情。这也是我不喜欢Ruby的原因。

一、Python时间操作

1 获取时间对象

import time
import 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 time
import 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 time
import datetime

# 时间对象转成时间戳
# 结果形如1582943851.470867
obj = datetime.datetime.now()
obj.timestamp()

# 时间戳转成时间对象
datetime.datetime.fromtimestamp(time.time())

4 时间的比较

import time
import 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学习交流群: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时间格式

Python、Shell、MySQL之间格式虽然大多是相同的,但小部分还是有区别,自己使用时要注意。比如分钟Python和Shell是"%H",但MySQL是"%i"。
在这里插入图片描述

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python3教程:在python/Shell/MySQL中时间获取与格式转换的方法总结 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • Python深浅拷贝的理解

    1.拷贝 拷贝实际上其实就是在赋值,比如我们有一个列表L1,定义另一个列表L2引用列表L1,实际上就是在拷贝列表L1的值,由于由于L1列表是可变的数据类型,所以当L1的值变的时候,L2的值也是在跟着变的.那其实就算L1内的是不可变的数据类型,L1的内容变化,L2的内容也一样会随之变化的 # # 拷贝(赋值) # Python学习交流QQ群:153708845…

    Python开发 2023年3月31日
    00
  • Python学习:数据类型转换的方法教程

    1.type() 函数 使用 type() 函数可以查看数据类型。 示例: >>> type(123) <class ‘int’> >>> type(12.3) <class ‘float’> >>> type(“abc”) <class ‘str’> >>…

    Python开发 2023年4月2日
    00
  • Python重用父类方法

    一、重用父类方法 1 与继承没有关系的重用 指名道姓的使用 在子类里想用父类的方法,我们可以直接用父类名.方法名()—>父类里方法有几个参数就传几个参数 我们看起来是子类在调用父类的方法,但是实际上,这并没有存在继承关系 class A: def __init__(self,name,age): self.name=name self.age=ag…

    Python开发 2023年4月2日
    00
  • 一篇文章轻松学会python装饰器

    1. 函数 在python中,函数通过def关键字、函数名和可选的参数列表定义。通过return关键字返回值。我们举例来说明如何定义和调用一个简单的函数: >>> def foo(): … return 1 >>> foo() 1 方法体(当然多行也是一样的)是必须的,通过缩进来表示,在方法名的后面加上双括号()就能够…

    Python开发 2023年4月2日
    00
  • 5个python中编程的大坑

    对于Python新手来说,写代码很少考虑代码的效率和简洁性,因此容易造成代码冗长、执行慢,这些都是需要改进的地方。本文是想通过几个案列给新手一点启发,怎样写python代码更优雅。 大坑一:不喜欢使用高级数据结构 1.sets(集合) 很多新手忽视sets(集合)和tuple(元组)的强大之处 例如,取两个列表交集: def common_elements(…

    Python开发 2023年3月31日
    00
  • python学习:map函数和filter函数用法教程

    map()函数可以对一个数据进行同等迭代操作。 例如: def f(x): return x * x r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) print(list(r)) map函数传入的第一个参数就是函数本身,即f。第二个参数是要操作的数据 map() 作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简…

    Python开发 2023年4月2日
    00
  • Python中struct 模块的使用教程

    1.struct 简单介绍 struct 是 Python 的内置模块, 在使用 socket 通信的时候, 大多数据的传输都是以二进制流的形式的存在, 而 struct 模块就提供了一种机制, 该机制可以将某些特定的结构体类型打包成二进制流的字符串然后再网络传输,而接收端也应该可以通过某种机制进行解包还原出原始的结构体数据 2.struct 的使用 str…

    python 2023年4月18日
    00
  • Python教程:用__new__ 创建单例模式

    1.用 __new__方法 class Singleton(object): def __new__(cls): if not hasattr(cls,’_instance’): cls._instance=super(Singleton,cls).__new__(cls) # cls.__instance = object.__new__(cls) #这样…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部