最近比较忙,也有可能是我自己比较懒…
来更新一篇吧,之前说要更新scrapy的文章,但是没有来得及准备,但是,
恰好碰到一个比较有意思的东西,波斯日历与公历的转换,有人咋眼一看可能一看到波斯日历就蒙蔽了,什么鬼东西。简单的科普下吧。

  • 波斯日历:波斯历又被称为伊朗历是根据太阳的周期运转而划分月份的,每年的第一天始于春分。它是阿富汗和伊朗的官方日历。波斯日历有6个月31天和5个月30天之分,最后一个月是29天还是30天取决于这一年是否是闰年。

最近,遇到这样一个网站,一看瞬间懵逼了,来给大家欣赏下…(没错红框里面的就是日期!!!)要抓取里面的内容,抓取的话就不介绍了,很简单,随便get下就能得到数据,但是这个时间!!!

百度一下,还是有人搞这些东西的,不然我真的不知道该怎么办了。

这里面有个calcPersian() 的方法,我们就来用python 改写然后实现它就OK了。

就是这个方法,里面还涉及到其他很多function,有兴趣的朋友可以去体验下。
网站:https://cn.calcuworld.com/波斯日历

怎么写的就不详细说明啦,还是比较耗时,直接上代码吧,写的可能不是很干净利索,勿喷…

# -*- coding: utf-8 -*-
import mathPERSIAN_EPOCH = 1948320.5
GREGORIAN_EPOCH = 1721425.5class caculate_Julian:def mod(self, a, b):return (a - b * math.floor(a / b))def persian_to_jd(self, year, month, day):epbase = year - 474epyear = 474 + self.mod(epbase, 2820)if month > 7:month = (month - 1) * 30 + 6else:month = (month - 1) * 31return day + month + math.floor(((epyear * 682) - 110) / 2816) +(epyear - 1) * 365 + math.floor(epbase / 2820) * 1029983 +(PERSIAN_EPOCH - 1)def leap_gregorian(self, year):if (year % 4) == 0 and (year % 100) != 0 or (year % 400) == 0:return Trueelse:return Falsedef gregorian_to_jd(self, year, month, day):if month <= 2:v = 0elif self.leap_gregorian(year):v = -1else:v = -2return (GREGORIAN_EPOCH - 1) +(365 * (year - 1)) +math.floor((year - 1) / 4) +(-math.floor((year - 1) / 100)) + math.floor((year - 1) / 400) + math.floor((((367 * month) - 362) / 12) +v +day)def jd_to_gregorian(self, jd):wjd = math.floor(jd - 0.5) + 0.5depoch = int(wjd - GREGORIAN_EPOCH)quadricent = math.floor(depoch / 146097)dqc = self.mod(depoch, 146097)cent = math.floor(dqc / 36524)dcent = self.mod(dqc, 36524)quad = math.floor(dcent / 1461)dquad = self.mod(dcent, 1461)yindex = math.floor(dquad / 365)year = (quadricent * 400) + (cent * 100) + (quad * 4) + yindexif not (cent==4 or yindex==4):year+=1yearday = int(wjd - self.gregorian_to_jd(year, 1, 1))if wjd < self.gregorian_to_jd(year, 3, 1):leapadj = 0elif self.leap_gregorian(year):leapadj = 1else:leapadj = 2month = math.floor((((yearday + leapadj) * 12) + 373) / 367)day = int((wjd - self.gregorian_to_jd(year, month, 1)) + 1)return (year, month, day)def jhms(self, j):j += 0.5ij = ((j - math.floor(j)) * 86400.0) + 0.5return (math.floor(ij/3600), math.floor((ij/60)%60), math.floor(ij%60))def calcJulian(self, date):date_list = date.split('-')year = int(date_list[0])month = int(date_list[1])day = int(date_list[2])j = float(self.persian_to_jd(year, month, day))date = self.jd_to_gregorian(j)year_julian = date[0]month_julian = str(date[1]).zfill(2)day_julian = str(date[2]).zfill(2)return '%s-%s-%s'%(year_julian, month_julian, day_julian)if __name__ == '__main__':caculate_date = caculate_Julian()print(caculate_date.calcJulian('1397-05-02'))

简单来计算个 1397-05-02,
结果:

没错就是今天(2018-07-24)。

#总结:

  • 不知道有么有可以直接拿来用的包,肯定有,但是不知道是哪个,有知道的大神,方便留言告知下。

Python-波斯日历转换(日期转换)相关推荐

  1. python linux 时间格式化,Python中的时间日期转换

    Python关于时间日期有两个库datetime和time,于是我们要在四种格式之间转换: datetime.datetime对象 datetime.datetime.now() time.struc ...

  2. python datatime字符串和日期转换

    文章目录 前言 一.datatime日期格式 二.使用步骤 总结 前言 本文为了达到字符串转日期的功能,特意写博文,以供下次使用 一.datatime日期格式 python中时间日期格式化符号: %y ...

  3. java 时区转换日期转换:东八区转为UTC零时区

    场景: 选择需要将日期:2023-03-31 13:24:51 转换为 UTC零时区格式的日期数据 思路: 采用joda.time 日期处理工具类 代码: @Testpublic void redd1 ...

  4. java 时区转换日期转换:UTC零时区转成东八区-19位

    场景: 选择需要将日期:2023-03-31T05:24:51.000Z 转换为 yyyy-MM-dd HH:mm:ss格式的日期数据 思路: 采用joda.time 日期处理工具类 代码: @Tes ...

  5. python各种类型日期转换大全

    最近写python做各种日期转换比较多,顺便总结一下,先上张图: 1 # 根据字符串类型转日期 返回值类型<class 'time.struct_time'> 2 st_time = ti ...

  6. python 数字日期转换,格式化时间,日期加减天,小时,分钟

    把数字转换成日期格式  例如:数字 202105271354 转换成日期格式 2021-05-27 13:54:00 from dateutil.parser import parset_list1 ...

  7. python显示日历_python显示日期

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 开发准备cas 的 python sdk 包含了用于访问和操作 cas 的所有 ...

  8. mysql 日期时间格式化字符串_MySQL日期函数与日期转换格式化函数大全

    Mysql作为一款开元的免费关系型数据库,用户基础非常庞大,本文列出了MYSQL常用日期函数与日期转换格式化函数 1.DAYOFWEEK(date) SELECT DAYOFWEEK('2016-01 ...

  9. 【转】MySQL日期函数与日期转换格式化函数大全

    Mysql作为一款开元的免费关系型数据库,用户基础非常庞大,本文列出了MYSQL常用日期函数与日期转换格式化函数 1.DAYOFWEEK(date) 1 2 SELECT DAYOFWEEK('201 ...

  10. 20100921 学习记录:关于sqlserver2005与ASP中 转换日期格式

    sqlserver2005使用convert转换日期 server使用convert来取得datetime日期数据,以下实例包含各种日期格式的转换语句及查询结果:Select CONVERT(varc ...

最新文章

  1. CVPR2021|Anchor-free新玩法,一个head统一目标检测,实例分割,姿态估计三种任务...
  2. 3年前的一个小项目经验,分享给菜鸟兄弟们(公文收发小软件:小技能 DeleteMark)...
  3. 38.C++修饰构造函数的explicit关键字
  4. 学计算机怎样才能考上大学,中国式家长考清华北大方法 重点大学怎么才能考上...
  5. Python with open() as 读写文件
  6. ASP.NET知识点
  7. Fluent Web API集成测试
  8. excel VLOOKUP函数的使用方法(入门级)
  9. 安装Linux系统后无法启动win,安装Win10 CentOS7双系统后无法启动Win10系统怎么办
  10. 奥维地图导入西安坐标_奥维地图导入坐标样式 奥维地图批量导入经纬度坐标...
  11. 【技巧】安卓版按键精灵手机抓抓 取色取坐标 获取屏幕触点坐标
  12. 手机端(移动端)UI框架整理
  13. teamviewer存在linux版本_linux安装teamviewer
  14. 三角网导线平差实例_导线平差自动计算表(非常实用)
  15. ORA-12514 错误的处理
  16. 一年级有计算机教学吗,一年级信息技术教学计划范文
  17. android inflate,Android inflate view的两种方式
  18. PHP开发基础(一)
  19. PostgreSql 配置文件 postgresql.conf 参数设置
  20. 你需要知道的8种数据结构

热门文章

  1. 连续时间正弦信号和离散时间正弦信号
  2. Shell中如何删除首行和尾行
  3. python中syntaxerror_解决python中syntaxerror错误的方法
  4. 合并mp3 例子代码
  5. php datedif,datedif 函数怎么用?
  6. 幸福小夫妻被五百万巨奖生生拆散 急于离婚
  7. 如何去除2345好压的广告弹窗
  8. 计算机储位分配,仓库储位分配的基本思路与原则
  9. wangEditor富文本编辑器自定义图片上传
  10. 研发团队绩效评定机制细则