在Python中将年/月/日转换为年份

我正在使用Python的“date时间”模块,即:

>>> import datetime >>> today = datetime.datetime.now() >>> print today 2009-03-06 13:24:58.857946

我想计算闰年敏感的年份。 oday(2009年3月6日)是2009年的第65天。 这里是基于networking的DateTime计算器 。

无论如何,我看到了两个select:

创build一个number_of_days_in_month数组= [31,28,…],决定是否是闰年,手动总结天数

使用datetime.timedelta进行猜测,然后进行二进制search以查找一年中正确的一天:

>>> import datetime >>> YEAR = 2009 >>> DAY_OF_YEAR = 62 >>> d = datetime.date(YEAR, 1, 1) + datetime.timedelta(DAY_OF_YEAR - 1)

这些都感觉非常笨重,我有一种直觉,认为有更多的“Pythonic”计算日常的方式。 任何想法/build议?

有一个非常简单的解决scheme:

day_of_year = datetime.now().timetuple().tm_yday

你不能使用strftime吗?

>>> import datetime >>> today = datetime.datetime.now() >>> print today 2009-03-06 15:37:02.484000 >>> today.strftime('%j') '065'

编辑

正如在注释中指出的,如果你想用这个数字进行比较或计算,你将不得不把它转换成int()因为strftime()返回一个string。 如果是这样,你最好使用DzinX的答案。

DZinX的回答是一个很好的答案。 我find这个问题,同时寻找反函数。 我发现这个工作:

import datetime datetime.datetime.strptime('1936-077T13:14:15','%Y-%jT%H:%M:%S') >>>> datetime.datetime(1936, 3, 17, 13, 14, 15) datetime.datetime.strptime('1936-077T13:14:15','%Y-%jT%H:%M:%S').timetuple().tm_yday >>>> 77

我对这里的礼仪不是很确定,但是我认为一个指向反函数的指针可能对像我这样的人有用。

我想在Python 3.4,Linux x64上介绍不同方法的性能。 从线轮廓仪摘录:

Line # Hits Time Per Hit % Time Line Contents ============================================================== (...) 823 1508 11334 7.5 41.6 yday = int(period_end.strftime('%j')) 824 1508 2492 1.7 9.1 yday = period_end.toordinal() - date(period_end.year, 1, 1).toordinal() + 1 825 1508 1852 1.2 6.8 yday = (period_end - date(period_end.year, 1, 1)).days + 1 826 1508 5078 3.4 18.6 yday = period_end.timetuple().tm_yday (...)

所以最有效的是

yday = (period_end - date(period_end.year, 1, 1)).days

只需从date减去1月1日:

import datetime today = datetime.datetime.now() day_of_year = (today - datetime.datetime(today.year, 1, 1)).days + 1

如果你有理由避免使用datetime模块,那么这些函数将起作用。

def is_leap_year(year): """ if year is a leap year return True else return False """ if year % 100 == 0: return year % 400 == 0 return year % 4 == 0 def doy(Y,M,D): """ given year, month, day return day of year Astronomical Algorithms, Jean Meeus, 2d ed, 1998, chap 7 """ if is_leap_year(Y): K = 1 else: K = 2 N = int((275 * M) / 9.0) - K * int((M + 9) / 12.0) + D - 30 return N def ymd(Y,N): """ given year = Y and day of year = N, return year, month, day Astronomical Algorithms, Jean Meeus, 2d ed, 1998, chap 7 """ if is_leap_year(Y): K = 1 else: K = 2 M = int((9 * (K + N)) / 275.0 + 0.98) if N < 32: M = 1 D = N - int((275 * M) / 9.0) + K * int((M + 9) / 12.0) + 30 return Y, M, D

python 月日年转年月日_在Python中将年/月/日转换为年份相关推荐

  1. JAVA把日期转换为年月日_在Java中将每年的日期转换为每月的日期

    首先,使用DAY_OF_YEAR常量设置一年中的某天.Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, 2018); cal. ...

  2. java script 月日年转年月日_如何将这种格式的日期(2010年7月13日星期二00:00:00 CEST)转换为Java日期(字符串来自alfresco属性)...

    我正在管理一个来自Alfresco Properties的日期,并且该日期处于指定的日期(2010年7月13日星期二00:00:00 CEST),我需要将其转换为Java日期-我四处查看并发现了数百万 ...

  3. python获取一个月之前日期_利用python获取当前日期前后N天或N月日期的方法示例...

    前言 最近因为工作原因,发现一个Python的时间组件,很好用分享出来!(忘记作者名字了,在这里先感谢了),下面话不多说,来一起看看详细的介绍吧. 示例代码: # -*- coding: utf-8 ...

  4. python数据库操作批量sql执行_利用Python如何批量修改数据库执行Sql文件

    利用Python如何批量修改数据库执行Sql文件 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  利用Python如何批量修改数据库执行Sql文件.txt ] (友 ...

  5. python控制语句中的条件语句_『Python』条件控制语句

    Loading... ## 1. 条件语句 ``` Python条件语句是通过一条或者多条语句的执行结果(True或False)来决定执行的代码块. ``` ``` 在Python中, 指定任何非0和 ...

  6. python如果选择不在列表里_使用python中的in ,not in来检查元素是不是在列表中的方法...

    使用python中的in ,not in来检查元素是不是在列表中的方法 更新时间:2018年07月06日 15:01:34 作者:mengtianwxs 今天小编就为大家分享一篇使用python中的i ...

  7. python实现微信自动加群_为Python开发人员提供实时代码片段,Kite获1700万美元A轮融资...

    [猎云网(微信号:)]1月29日报道(编译:孙家乐) Kite是一款为Python开发人员提供实时代码片段的工具,它在由Trinity Ventures领投的A轮融资中获得了1700万美元.最新版本的 ...

  8. python版植物大战僵尸源码_基于python的植物大战僵尸游戏设计与实现.docx

    湖南理工学院毕业设计(论文) PAGE PAGE 1 学 号 毕业设计(论文) 题目:基于python的植物大战僵尸游戏设计与实现 作 者 届 别 届 院 别 信息与通信工程学院 专 业 信息工程 指 ...

  9. python分析股票数据的项目_用Python分析股市指数

    專 欄 ❈本文作者:王勇,目前感兴趣项目商业分析.Python.机器学习.Kaggle.17年项目管理,通信业干了11年项目经理管合同交付,制造业干了6年项目管理:PMO,变革,生产转移,清算和资产处 ...

最新文章

  1. Action4D:人群和杂物中的在线动作识别:CVPR209论文阅读
  2. WPF Viewport3D 解决透视模式时窗体模糊
  3. 构筑企业虚拟桌面应用环境-使用VMware VDI为企业统一提供虚拟桌面环境(上)
  4. java Class对象返回的都是指向同一个java堆地址上的Class引用
  5. endl与'\n'的区别
  6. UpdatePanel的内容中出现自定义多语言运行异常
  7. ASP.NET 2.0中CSS失效的问题总结
  8. 会议通知|2019年全国高校大数据专业教学研讨与教师培训
  9. 计算机可以辅助解决哪些医学问题,计算机辅助医学影像诊查之关键学习技术研究...
  10. python爬取豆瓣电影top250的名字_Python爬虫-爬取豆瓣电影Top250
  11. springboot自动装配原理(通俗易懂)
  12. 内蒙古电大计算机考试成绩查询成绩查询,中考查分系统
  13. 传智播客java教程视频资源,附学习笔记+面试整理+进阶书籍
  14. kux转mp4_QSV、KUX一秒转换成MP4,这两款神器你还不收藏?
  15. iOS Apple Pay开发流程
  16. 炎黄盈动易鲸云低代码平台,全面助推企业数字化转型升级
  17. 什么是 Scrum 中的 Timeboxing? 1
  18. 03【Verilog实战】UART通信协议,半双工通信方式(附源码)
  19. 页面静态化(JSP动态页面转静态化)相关
  20. MacBook(m1) 通过brew安装PHP环境

热门文章

  1. 卡罗拉 (COROLLA) - 参数配置
  2. 如何让网站在360搜索结果中显示“官网”标志?
  3. 欺上瞒下!刘强东痛批京东中高层拿PPT欺骗自己!
  4. 扎克伯格:Facebook不会把位置数据交给政府,哪怕是用于追踪新冠病毒!
  5. 小程序的服务通知(模板消息) 实现以及坑
  6. 如何把InputStream字节流和InputStreamReader字符流转换成我们能看懂的String字符串
  7. 聚苯乙烯和可膨胀聚苯乙烯的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  8. 关于虚拟机镜像无法检测
  9. 【游戏开发实战】小岛城堡里的常春藤,听新发剖析Unity案例知识点
  10. 关于maven打包时,没有将依赖包打进来的问题