Exemple #1
0
def main():
  parser = ArgumentParser(description = 'Calender')
  parser.add_argument('-y', '--year', required = False, help = 'Specify the year to calulate.')
  parser.add_argument('-t', '--time', required = False, help = 'Specify the time to calulate,like: "2014-08-1" or "# "2014-12-01 13:12:12"')
  parser.add_argument('-g', '--gender', required = False, default = 'M', help = 'Specify the gender of the person to calulate, like: "M" or "F"')

  args = parser.parse_args()

  yy = GZTime()
  if args.year:
    yy = GZTime(int(args.year))
  else:
    if not args.time:
      args.time = "1979-11-13 15:20:00"

    print args.time

    tt = None
    try:
      tt = datetime.strptime(args.time,'%Y-%m-%d %X')
    except ValueError as e:
      tt = datetime.strptime(args.time,'%Y-%m-%d')
    yy.setTime(tt)


  if args.gender != 'M' and args.gender != 'F':
    print "Error in gender, it should be 'F' or 'M'."
    return

  gzNumber = HLNumbers(
    args.gender, # 'M' or 'F'
    yy
    )

  gzNumber.dump()
Exemple #2
0
class WuYun:
  ZhongYun = {
  "甲": "土运太过--岁土太过,雨湿流行",
  "己": "土运不及--岁土不及,风乃大行",

  "乙": "金运不及--岁金不及,炎火乃行",
  "庚": "金运太过--岁金太过,燥气流行",

  "丙": "水运太过--岁水太过,寒气流行",
  "辛": "水运不及--岁水不及,湿乃大行",

  "丁": "木运不及--岁木不及,燥乃大行",
  "壬": "木运太过--岁木太过,风气流行",

  "戊": "火运太过--岁火太过,炎暑流行",
  "癸": "火运不及--岁火不及,寒乃大行"
  }

  WuYun = "初运 二运 三运 四运 终运".split(' ')

  # 阳干
  # YangGan = ["甲", "丙", "戊", "庚", "壬"]

  def __init__(self, yy):

    self.year = yy
    self.gz = GZTime(yy)
    self.y_tiangan = self.gz.getYTiangan()
    self.y_dizhi = self.gz.getYDizhi()
    self.zhongyun = WuYun.ZhongYun[self.y_tiangan]
    self.st = SolarTerm()

    # 中运的初运日为去年的大寒节日
    self.cy_time = self.st.getJieqiTime(yy - 1, "大寒")
    self.cy_gzt = GZTime()
    self.cy_gzt.setTime(self.cy_time)

    # 判断干德符
    self.gdf = self.y_tiangan == self.cy_gzt.getDTiangan() or self.y_tiangan == self.cy_gzt.getHTiangan()
    self.gdfStr = None
    if self.y_tiangan == self.cy_gzt.getDTiangan():
      self.gdf = True
      self.gdfStr = "年干与交运第一天的日干相合"

    if self.y_tiangan == self.cy_gzt.getHTiangan():
      self.gdf = True
      self.gdfStr = "年干与交运第一天的时干相合"


    # 计算交司时刻
    # 每时辰八刻(初初刻、初一刻、初二刻、初三刻、初四刻、正初刻、正一刻、正二刻、正三刻、正四刻)
    keList =   [0,     144,   1008, 1872,  2736, 3600,  3744,  4608, 5472,  6336]
    keOff = [0, 6, 2, 8, 4]

    hoff = [3, 9, 15, 21]
    JQMark  = ["大寒", "春分", "芒种", "处暑", "立冬"]
    JQYear  = [yy - 1, yy, yy, yy, yy, yy]
    daysOff = [0,      13,     10,     7,     4]
    hi = GZTime.Dizhi.index(self.y_dizhi) % 4
    self.t = []
    for i in xrange(0,6):
      d = self.st.getJieqiTime(JQYear[i], JQMark[i%5])
      d2 = datetime(d.year, d.month, d.day, hoff[hi]) + timedelta(seconds=keList[keOff[i%5]]) + timedelta(days=daysOff[i%5])
      self.t.append(d2)
      # print WuYun.WuYun[i%5], " | ", self.t[i]

  # 年的天干地支
  def getYTD(self):
    return self.y_tiangan + self.y_dizhi

  def __str__(self):
    ss =  "中运:" + self.zhongyun + "\n" \
        "初运日: " + str(self.cy_gzt.time) + " : " + str(self.cy_gzt) + "\n"
    if self.gdf:
      ss += "干德符 --> 平气 : " + self.gdfStr
    return ss

  # 五运三纪
  def getWuYunSanJi(self):
    ss = str(self.year) + " 五运三纪: "
    if self.gdf:
      ss += "平气" + " (干德符: " + self.gdfStr + ")"
    else:
      ss += self.zhongyun
    return ss


  def getZhongYun(self):
    i = GZTime.Tiangan.index(self.y_tiangan)
    wy = WuYin(i % 2, i % 5)
    return wy

  def getZhongYunZhiQi(self):
    zy = self.getZhongYun()
    return zy.getQi(), zy.getTaiShao()

  def getKeYun(self):
    i = GZTime.Tiangan.index(self.y_tiangan)
    wy = WuYin(i % 2, i % 5)
    res = []
    for i in xrange(0,5):
      res.append(wy.next(i))
    return res

  def getKeYunList(self):
    kyL = self.getKeYun()
    res = []
    for i in kyL:
      res.append(str(i))
    return res

  def getZhuYunList(self):
    zyL = self.getZhuYun()
    res = []
    for i in zyL:
      res.append(str(i))
    return res

  def getZhuYun(self):
    i = GZTime.Tiangan.index(self.y_tiangan)
    j = i % 5
    wy = WuYin(i % 2, j)
    res = [wy]
    wy2 = wy
    while not wy2.isJiao():
        wy2 = wy2.prev(1)
        res.insert(0,wy2)

    while not wy.isYu():
      wy = wy.next(1)
      res.append(wy)
    return res

  # 五运交司时刻
  def getWuYunTime(self):
    tt = []
    for i in xrange(0,5):
      tt.append(str(self.t[i]) + " - " + str(self.t[i+1]))
    return tt

  def getWuYunTimeFormatStr(self):
    s = "| {0:68}|\n".format("五运交司时刻:")
    for i in xrange(0,5):
      s +=  "| " + WuYun.WuYun[i] +  " : {0:^54} |".format(str(self.t[i]) + " - " + str(self.t[i+1]))
      if i != 4:
        s += "\n"
    return s

  # 相得不相得
  def calcZhuKe(self, zz, kk):
    z = zz.index
    k = kk.index
    if z == k:
      return True, "同气求"
    if ((z+1) % 5) == k:
      return True, "主生客"
    if (z-1) % 5 == k:
      return True, "客生主"
    if (z+2) % 5 == k:
      return False, "主克客"
    if (z-2) % 5 == k:
      return True, "客克主"
    return None

  # 判断主运与客运是否相得
  def getXiangDe(self, zy, ky):
    xd = []
    for i in xrange(0,5):
      xd.append(self.calcZhuKe(zy[i],ky[i]))
    return xd

  def getXiangDeFormatStr(self, zy, ky):
    s = "| 相得   |"
    xd = [None, None, None, None, None]
    for i in xrange(0,5):
      xd[i] = self.calcZhuKe(zy[i], ky[i])
      if xd[i][0]:
        s += " {0:12}".format(xd[i][1])
      else:
        s += " {0:^8} ".format("X")
      s += "|"
    return s

  # 判断主运与客运是否不相得
  def getBuXiangDeFormatStr(self, zy, ky):
    s = "| 不相得 |"
    xd = [None, None, None, None, None]
    for i in xrange(0,5):
      xd[i] = self.calcZhuKe(zy[i], ky[i])
      if not xd[i][0]:
        s += " {0:12}".format(xd[i][1])
      else:
        s += " {0:^8} ".format("X")
      s += "|"
    return s

  def toSimpleJson(self):
    zy = self.getZhuYun()
    ky = self.getKeYun()
    ret = {}
    ret["交司时刻"] = self.getWuYunTime()
    ret["客运"] = self.getKeYunList()
    ret["中运"] = str(self.getZhongYun())
    ret["主运"] = self.getZhuYunList()
    ret["相得"] = self.getXiangDe(zy, ky)
    return ret

  def toString(self):
    zy = self.getZhuYun()
    ky = self.getKeYun()
    ret = ""
    sep = "+---------------------------------------------------------------+"
    ret += sep
    ret += "\n|{0:^65}|".format("五运")
    ret += "\n" + sep
    ret += "\n" + self.getWuYunTimeFormatStr()
    ret += "\n" + sep
    ret += "\n|        |   初运   |   二运   |   三运   |   四运   |   终运   |"
    ret += "\n|  客运  | " + " | ".join(self.getKeYunList()) + " | "
    ret += "\n|  中运  | {0:^56}| ".format(str(self.getZhongYun()))
    ret += "\n|  主运  | " + " | ".join(list2str(zy)) + " | "
    ret += "\n" + sep
    ret += "\n" + self.getXiangDeFormatStr(zy, ky)
    ret += "\n" + self.getBuXiangDeFormatStr(zy, ky)
    ret += "\n" + sep
    return ret