Python获取"3年前的今天"的日期时间问题

 更新时间:2023年01月11日 10:30:11   作者:爱家家的卡卡  
在Python中,如何获取" 3年前的今天"的datetime对象,本文通过实例代码给大家详细讲解,代码简单易懂对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

Python:获取“ 3年前的今天”的日期时间

Python: get datetime for '3 years ago today'

在Python中,如何获取" 3年前的今天"的datetime对象?

更新:FWIW,我不太在乎准确性……也就是说,今天是2月29日,我不在乎我的答案是2月28日还是3月1日。 在这种情况下,简洁比可配置性更重要。

相关讨论

  • 如何创建等于15分钟前的DateTime的可能重复项?
  • 大概是今天的3月1日,无论之间是否有a年,您都想获得3月1日? 我认为所有现有的答案在这方面都失败了。
  • 几乎但不完全:不变的15分钟与没有变化的3年之间的差异是巨大的。
  • @Jason我同意你的观点,尽管从OP的编辑看来,他似乎并不太担心,所以这样的话将是重复的。
  • 当人们接受明显不正确的答案时,此站点确实需要社区替代的方法。 3 * 365天不是3年,并且在那里有正确的答案。
  • @Glenn Maynard-您可以编辑标题。 因为他真的不想要3年前。

如果需要精确,请使用dateutil模块来计算相对日期:

from datetime import datetime
from dateutil.relativedelta import relativedelta

three_yrs_ago = datetime.now() - relativedelta(years=3)

感谢您的准确性。即使OP不在乎准确性,其他人也可能会。

import datetime
datetime.datetime.now() - datetime.timedelta(days=3*365)
  • (-1)这显然是错误的,因为它不处理leap年。
  • AP257说:"我不太在乎准确性"。我解释为"我不在乎leap年"
  • @Diniz:您将其解释为"我想错了"。做到这一点是如此容易,做错它只是愚蠢的,当有正确答案时,就很奇怪地接受这个答案。
  • 提问者明确告诉相反的情况时,给出一个不太简洁但更准确的答案是否正确?
  • +1为简单起见。也许OP只是想举一个总体上如何做这样的例子。
  • 这有点草率。
  • 感谢您的简单性。我也不在乎准确性。无论如何,我实际上一直在寻找不同的日子。
  • 对于"我不太在乎准确性"给出的示例表明,提问者实际上并未充分考虑问题。该示例并不关心2月29日变为2月28日还是3月1日,但是此代码可以(通常将)执行将3月5日转换为3月6日的操作。不关心第一件事的人可能仍然会关心第二件事。 。
  • 如果您特别关心地球在轨道上的位置,则可以通过乘以365.2422来精确地处理leap年。
  • 减去365 * 3天当然是错误的-您跨越crossing年的时间超过一半。

ED:为了正确地解决the年问题,

def subtract_years(dt, years):
    try:
        dt = dt.replace(year=dt.year-years)
    except ValueError:
        dt = dt.replace(year=dt.year-years, day=dt.day-1)
    return dt
  • 我认为这是经常被忽视的事情。
  • 好吧,现在您还有另一个问题:datetime.datetime(2008,2,29).replace(year=2005) -> ValueError。捕捉到该错误并减去一整天,我认为它仍然更加准确。
  • @Jochen:是的,很简单。
  • 我一直忘了replace。它比我的解决方案更简单。
  • @Mark:我也刚开始做过;我最初做的是你做的。不过,该网站似乎在该版本的编辑历史记录中放错了该版本。
  • 2100年后会发生什么?
def add_years(dt, years):
    try:
        result = datetime.datetime(dt.year + years, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.microsecond, dt.tzinfo)
    except ValueError:
        result = datetime.datetime(dt.year + years, dt.month, dt.day - 1, dt.hour, dt.minute, dt.second, dt.microsecond, dt.tzinfo)
    return result

>>> add_years(datetime.datetime.now(), -3)
datetime.datetime(2008, 3, 1, 12, 2, 35, 22000)
>>> add_years(datetime.datetime(2008, 2, 29), -3)
datetime.datetime(2005, 2, 28, 0, 0)

尽管使用dateutil的答案很好,但是另一种方法是在PyPI上使用pendulum包。有关更多信息,请参阅其文档。

>>> import pendulum
>>> dt = pendulum.now().subtract(years=3)
>>> dt
DateTime(2015, 10, 5, 17, 44, 41, 82598, tzinfo=Timezone('America/New_York'))
>>> type(dt)
pendulum.datetime.DateTime

如果您需要当前日期时间来进一步使用,则可能应该先将pendulum.now()保存到变量中,然后再使用该变量!

如果您确实想避免时区,请使用.naive()。

您不需要将结果转换为原生Python对象,但是如果确实需要,一种实现方法是:

>>> import datetime
>>> pydt = datetime.datetime.fromisoformat(dt.isoformat())
>>> pydt
datetime.datetime(2015, 10, 5, 17, 44, 41, 82598, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000)))
>>> type(pydt)
datetime.datetime

看不到它,它非常简单明了,

In [1]: import datetime

In [2]: dt = datetime.datetime.today()

In [3]: datetime.datetime(year=dt.year-3, month=dt.month, day=dt.day)
Out[3]: datetime.datetime(2016, 4, 11, 0, 0)

为什么不简单在替换年份之前检查a年。
这不需要任何额外的程序包或try:Except。

def years_ago(dt, years):
if dt.month == 2 and dt.day == 29:
    dt = dt.replace(day=28)
return dt.replace(year=dt.year - years)
In [3]: import datetime as dt

In [4]: today=dt.date.today()

In [5]: three_years_ago=today-dt.timedelta(days=3*365)

In [6]: three_years_ago
Out[6]: datetime.date(2008, 3, 1)

ps:python获取三年前的日期

three_yrs_ago_day = (datetime.now() - relativedelta(years=3)).strftime('%Y%m%d')

python处理几年前几月前几日前的时间

def conv_time(t):
    min = int(re.findall('\d+', t)[0])
    print(min,'---')
    dt = arrow.now()
    if u'秒' in t:
        s = (dt - timedelta(seconds=min))
    elif u'分钟' in t:
        s = (dt - timedelta(minutes=min))
 
    elif u'小时' in t:
        s = (dt - timedelta(hours=min))
    elif u'天' in t:
        s = (dt - timedelta(days=min))
    elif u'周' in t:
        s = (dt - timedelta(weeks=min))
    elif u'月' in t:
        s = dt.shift(months=-min)
    elif u'年' in t:
        s =str(int(datetime.datetime.now().strftime("%Y"))-min)+"-"+datetime.datetime.now().strftime("%m-%d")
    else:
        t += ", " + current_year
        s = datetime.strptime(t, "%m-%d, %Y")
    return int(time.mktime(s.timetuple()))

python3 获取n年前日期

import time
import datetime
import random

#13位时间戳
temp=time.time()
timestamp=int(round(temp*1000))
str_timestamp=str(timestamp)

t=datetime.datetime.now()
#15年前
d2=(t+datetime.timedelta(days=-365*15)).strftime("%Y%m%d")
#23年前
d3=(t+datetime.timedelta(days=-365*23)).strftime("%Y%m%d")

print(str_timestamp)
print(d2)
print(d3)

输出

macname@MacdeMacBook-Pro Desktop % python3 test.py 
1610095883568
20060112
19980114
macname@MacdeMacBook-Pro Desktop %

到此这篇关于Python:获取“ 3年前的今天”的日期时间的文章就介绍到这了,更多相关Python内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 简单分析Python中用fork()函数生成的子进程

    简单分析Python中用fork()函数生成的子进程

    这篇文章主要介绍了Python中用fork()函数生成的子进程,分析子进程与父进程的执行顺序,需要的朋友可以参考下
    2015-05-05
  • 解决pytorch 模型复制的一些问题

    解决pytorch 模型复制的一些问题

    这篇文章主要介绍了解决pytorch 模型复制的一些问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Python实现判断一个字符串是否包含子串的方法总结

    Python实现判断一个字符串是否包含子串的方法总结

    这篇文章主要介绍了Python实现判断一个字符串是否包含子串的方法,结合实例形式总结分析了四种比较常用的字符串子串判定方法,需要的朋友可以参考下
    2017-11-11
  • python爬虫Mitmproxy安装使用学习笔记

    python爬虫Mitmproxy安装使用学习笔记

    这篇文章主要介绍了python爬虫Mitmproxy学习笔记分享,有需要的朋友可以收藏学习下,希望可以对你有所帮助,大家一起共同学习,共同进步
    2021-09-09
  • PyQt5每天必学之工具提示功能

    PyQt5每天必学之工具提示功能

    这篇文章主要为大家详细介绍了PyQt5每天必学之工具提示功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • window下eclipse安装python插件教程

    window下eclipse安装python插件教程

    这篇文章主要为大家详细介绍了window下eclipse安装python插件教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 浅谈django框架集成swagger以及自定义参数问题

    浅谈django框架集成swagger以及自定义参数问题

    这篇文章主要介绍了浅谈django框架集成swagger以及自定义参数问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • python commands模块的适用方式

    python commands模块的适用方式

    这篇文章主要介绍了python commands模块的适用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Python实现批量检测HTTP服务的状态

    Python实现批量检测HTTP服务的状态

    本文给大家分享的是一个使用python实现的批量检测web服务可用性的脚本代码,主要功能有测试一组url的可用性(可以包括HTTP状态、响应时间等)并统计出现不可用情况的次数和频率等。
    2016-10-10
  • python udp如何实现同时收发信息

    python udp如何实现同时收发信息

    这篇文章主要介绍了python udp如何实现同时收发信息,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05

最新评论