#!/usr/bin/python3.7
# -*- coding: UTF-8 -*-
'''
输入年月日时,输出8字
'''
import time
import json
import sys
import os
import sxtwldefault_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:reload(sys)class bazi:tiangan = ['甲','乙','丙','丁','戊','己','庚','辛','壬','癸']dizhi   = ['子','丑','寅','卯','辰','巳','午','未','申','酉','戌','亥']ShX     = ['鼠','牛','虎','兔','龙','蛇','马','羊','猴','鸡','狗','猪']ymc     = [u"十一", u"十二", u"正", u"二", u"三", u"四", u"五", u"六", u"七", u"八", u"九", u"十" ]rmc     = [u"初一", u"初二", u"初三", u"初四", u"初五", u"初六", u"初七", u"初八", u"初九", u"初十",u"十一", u"十二", u"十三", u"十四", u"十五", u"十六", u"十七", u"十八", u"十九",u"二十", u"廿一", u"廿二", u"廿三", u"廿四", u"廿五", u"廿六", u"廿七", u"廿八", u"廿九", u"三十", u"卅一"]y_t = None  ## 年天干下标d_t = None  ## 日天干下标century = None  # 世纪数month = None # 所求月份year = None # 所求年份day = None # 所求日子hour = None # 所求时间is_run = None # 是否是闰年# 算年柱def getyear(self,year):# 算法: 年份 - 3 % 10 即天干对应的位置#        年份 - 3 % 12 即地支对应的位置self.y_t = (year-3)%10-1y_tian = self.tiangan[self.y_t]y_di = self.dizhi[(year-3)%12-1]return y_tian+y_di+"("+self.ShX[(year-3)%12-1]+')'+"年"# 算 月柱def getmonth(self,month):'''甲己之年丙作首,乙庚之岁戊为头,丙辛之岁庚寅上,丁壬壬寅顺行流,若言戊癸何方起,甲寅之上去寻求。'''yt_start = [2,4,6,8,0,2,4,6,8,0]tian_index = (yt_start[self.y_t] + int(month-1))%10m_tian = self.tiangan[tian_index]m_di = self.dizhi[(month+1)%12]return m_tian+m_di+"月"# 算日柱def getday(self,day):'''高氏公式  r = s//4*6+5(s//4*3 + u) + m + d + xr: 日柱的母数 ,r%60 即是日柱的干支序数s: 公元年数后两位数减1,取整数值u: s%4m: 月基数d: 日期数x: 世纪常数世纪常数公式  x = (44(c-17) + (c-17)//4 + 3)%60c : 世纪数注意 闰年 2月之后,求出的r需要再加上1月基数:月份:  | 1 | 2  | 3  | 4  | 5 | 6  | 7 | 8  | 9 | 10 | 11 | 12 |月基数:| 0 | 31 | -1 | 30 | 0 | 31 | 1 | 32 | 3 | 33 | 4  | 34 |世纪常数:世纪数:  | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |世纪常数:| 3  | 47 | 31 | 15 | 0  | 44 | 28 | 12 | 57 | 41 |'''month_base = [0 , 31 , -1 , 30 , 0 , 31 , 1 , 32 , 3 , 33 , 4  , 34]century_base = [-3  , 47 , 31 , 15 , 0  , 44 , 28 , 12 , 57 , 41]s = self.year%100-1u = s%4m = month_base[self.month-1]x = (44 * (self.century-17)+ (self.century-17)//4 + 3)%60r = s//4*6+5*(s//4*3 + u) + m + day + xif self.is_run :if self.month > 2:r += 1self.d_t = r%10-1d_tian = self.tiangan[r%10-1]d_id = self.dizhi[r%12-1]return d_tian+d_id+"日"# 算时柱def gethour(self,hour):hours = [23,1,3,5,7,9,11,13,15,17,19,21]j = 1for i in hours:if hour >= i:h_di = jj += 1if h_di >= 11 :if hour >= hours[0]:h_di = 1'''甲己还加甲,乙庚丙作初,丙辛生戌子,丁壬庚子头,戊癸起壬子,周而复始求。'''ht_start = [0,2,4,6,8,0,2,4,6,8]h_index = (ht_start[self.d_t] + int(h_di-1))%10h_tian = self.tiangan[h_index]h_di = self.dizhi[h_di-1]return h_tian+h_di+"时"# 总方法def getbazi(self,datetime,is_Lunar=False):date = time.strptime(datetime, '%Y-%m-%d %H:%M:%S')unix_time = time.mktime(date)data = time.localtime(unix_time)note = "阳历"+datetime+" 的八字为 "if is_Lunar:note = "农历"+time.strftime('%Y',data)+"年"+self.ymc[(int(time.strftime('%m',data))+1)%12] + "月" + self.rmc[int(time.strftime('%d',data))-1] + " " + time.strftime('%H',data)+'点'+time.strftime('%M',data)+'分'+time.strftime('%S',data) + '秒 的八字為 '## 农历转阳历lunar = sxtwl.Lunar()  #实例化日历库day = lunar.getDayByLunar(int(time.strftime('%Y',data)), int(time.strftime('%m',data)), int(time.strftime('%d',data)))datetime = str(day.y)+'-'+str(day.m)+'-'+str(day.d)+' '+time.strftime('%H',data)+':'+time.strftime('%M',data)+':'+time.strftime('%S',data)date = time.strptime(datetime, '%Y-%m-%d %H:%M:%S')unix_time = time.mktime(date)data = time.localtime(unix_time)self.year = int(time.strftime('%Y',data))## 要加上24节气的判断,来确定所属月份jieqi = self.read_json_file(str(self.year))jieqi = json.loads(jieqi)newmonths = jieqi[::2]j = 1for i in newmonths:jqtime = int(time.mktime(time.strptime(i['time'], '%Y-%m-%d %H:%M:%S')))if j < 12:if int(unix_time) >= jqtime:newmonth = jelse:if int(unix_time) < jqtime:newmonth = jj += 1self.month = int(time.strftime('%m',data))self.day = int(time.strftime('%d',data))self.hour = int(time.strftime('%H',data))self.century = self.year//100+1self.is_run = self.comrun(self.year)y = self.getyear(self.year)m = self.getmonth(newmonth)d = self.getday(self.day)h = self.gethour(self.hour)return note+y+m+d+h## 算是否是闰年def comrun(self,year):i = 0if (year % 4) != 0 :i=0elif ((year % 100) == 0) & ((year % 400) != 0):i=0else:i=1return i## 读取该年节气数  json 文件又我上一篇提供## https://blog.csdn.net/rainredhezhang/article/details/88824524def read_json_file(self,name):json_file = open('./json/' + name + '.json', 'r',encoding="utf-8")json_str = json_file.read()dic = json.loads(json_str)return dic## 只能算 1970 年,到现在的年份的天干地支

pthon 获取天干纪年相关推荐

  1. php 获取当月的阴历值,PHP计算节日、节气、农阳历互换的代码

    1. php 获取当月的阴历值 <?phpfunction lunarcalendar($month, $year) {global $lnlunarcalendar; //农历每月的天数.每个 ...

  2. php获取农历日期节日

    $c = new DayService();$today=$c->convertSolarToLunar(date('Y'),date('m'),date('d'));$time =" ...

  3. php自动获取节气对应的年月日_php如何通过日期获取农历、节日、节气?

    php如何通过日期获取农历.节日.节气? 发布时间:2020-05-21 11:57:28 来源:亿速云 阅读:229 作者:Leah php如何通过日期获取农历.节日.节气?这篇文章运用了实例代码展 ...

  4. mysql 获取农历年份_php获取农历(阴历)、节日、节气的类的方法以及用法

    这篇文章主要介绍了php实现获取农历(阴历).节日.节气的类与用法,结合实例形式分析了php日期工具类Lunar的具体定义与获取农历日期.节气等相关操作技巧,需要的朋友可以参考下 具体如下: /* * ...

  5. php获取农历、节日、节气

    1 /* 2 * 农历 节气 节日 3 * edit: www.jbxue.com 4 */ 5 header("Content-Type:text/html;charset=utf-8&q ...

  6. 新历转旧历,获取节日

    </pre><pre name="code" class="php"><?php /** 农历 节气 节日* edit: www. ...

  7. 通过公历年计算天干地支

    为什么80%的码农都做不了架构师?>>>    #-*-coding:utf-8 -*- import re tianGan=["癸","甲" ...

  8. java 天干地支_Java-获取年月日对应的天干地支

    1 public classMyDate {2 /** 3 * 对于年月日的天干地支4 */ 5 private intyear_ganZhi;6 private intmonth_ganZhi;7 ...

  9. Java-获取年月日对应的天干地支

    一.概述 本次是以java语言开发为例,计算出年月日对应的天干地支. 二.代码 1 public class MyDate { 2 /** 3 * 对于年月日的天干地支 4 */ 5 private ...

最新文章

  1. 解决Qt+OpenGL更换图像纹理的问题
  2. 三星教父逝世!李健熙缔造的商业传奇和争议人生
  3. linux命令重定向、、 1、 2、 1、 2、
  4. IBM 火雪挺:人工智能如何影响衣食住行?
  5. php按照字段合并数组,PHP实现数组根据某个字段进行水平合并横向合并代码实例...
  6. linux mysql 不区分大小写,Linux下设置MySQL不区分大小写_MySQL
  7. CentOS6_mini_安装后基本配置
  8. 理解JavaScript中原型继承
  9. 在智能家居时代,你愿意用个人数据换取收益吗?
  10. 5-vue-template模板制作
  11. Google 开通免费主机服务,如果你有email帐户,你就可以注册,目前最多只能存放40页面...
  12. idea导入java文件_怎么在idea中导入Java文件并运行文件
  13. 【ubuntu如何录制gif图】
  14. java流重定向如何分类,Java 文件流与标准流之间的重定向
  15. python手把手教你创作趣味词云(保姆级贴心)
  16. 【codevs2853】方格游戏 DP
  17. macbook android 热点,Mac_mac如何做热点?mac创建wifi热点方法介绍,  如果是家里有路由器的, - phpStudy...
  18. check the manual that corresponds to your MySQL server version for the right
  19. Planting Trees Day 植树节 一起去种树
  20. 带附件/密送/抄送的 javaMail 邮件发送 -- java_demo(两种实现方式)

热门文章

  1. CSS文本溢出省略号在Grid / Flex中不起作用
  2. 《Universal Language Model Fine-tuning for Text Classification》翻译
  3. 中国青年报:COS 有义务回应公众质疑
  4. 刚子扯谈:市场供需关系决定生存
  5. 为什么接吻的时候一定要紧闭双眼?
  6. 刻章不要钱 5个在线印章制作工具
  7. hdu 1735 文字统计
  8. c语言数据结构课程设计电梯,数据结构课程设计报告(模拟电梯).doc
  9. 10 降维算法(PCA降维/LDA分类/NMF非负矩阵)
  10. 【mysql知识点整理】 --- 准确理解 in 和 exists