xtime.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. # update: 2021-10-21
  2. """
  3. %a 星期的简写。如 星期三为Web
  4. %A 星期的全写。如 星期三为Wednesday
  5. %b 月份的简写。如4月份为Apr
  6. %B月份的全写。如4月份为April
  7. %c: 日期时间的字符串表示。(如: 04/07/10 10:43:39)
  8. %d: 日在这个月中的天数(是这个月的第几天)
  9. %f: 微秒(范围[0,999999])
  10. %H: 小时(24小时制,[0, 23])
  11. %I: 小时(12小时制,[0, 11])
  12. %j: 日在年中的天数 [001,366](是当年的第几天)
  13. %m: 月份([01,12])
  14. %M: 分钟([00,59])
  15. %p: AM或者PM
  16. %S: 秒(范围为[00,61],为什么不是[00, 59],参考python手册~_~)
  17. %U: 周在当年的周数当年的第几周),星期天作为周的第一天
  18. %w: 今天在这周的天数,范围为[0, 6],6表示星期天
  19. %W: 周在当年的周数(是当年的第几周),星期一作为周的第一天
  20. %x: 日期字符串(如:04/07/10)
  21. %X: 时间字符串(如:10:43:39)
  22. %y: 2个数字表示的年份
  23. %Y: 4个数字表示的年份
  24. %z: 与utc时间的间隔 (如果是本地时间,返回空字符串)
  25. %Z: 时区名称(如果是本地时间,返回空字符串)
  26. """
  27. import datetime
  28. import time
  29. UTC_PATTERN = '%Y-%m-%dT%H:%M:%S.%fZ'
  30. LOCAL_PATTERN = '%Y-%m-%d %H:%M:%S'
  31. def string_to_dt(string, pattern='%Y-%m-%d'):
  32. """
  33. 字符串转为日期
  34. """
  35. return datetime.datetime.strptime(string, pattern)
  36. def dt_to_string(date, pattern='%Y-%m-%d %H:%M:%S'):
  37. """
  38. 日期转为字符串
  39. """
  40. return date.strftime(pattern)
  41. def string_to_ts(string, pattern='%Y-%m-%dT%H:%M:%S.%f'):
  42. """
  43. 日期转为时间戳
  44. Example:
  45. string_to_ts(2015-01-01)
  46. 1420041600
  47. """
  48. return int(time.mktime(time.strptime(string, pattern)))
  49. def ts_to_string(int_time, pattern='%Y-%m-%d %H:%M:%S.%f'):
  50. """
  51. 时间戳->字符串
  52. """
  53. return datetime.datetime.fromtimestamp(int_time).strftime(pattern)[:-3]
  54. # return time.strftime(pattern, time.localtime(int(int_time)))
  55. def now_string(pattern='%Y-%m-%d %H:%M:%S'):
  56. """
  57. 获取当前时间戳
  58. """
  59. return datetime.datetime.now().strftime(pattern)
  60. def iso_string_to_ts(string):
  61. """
  62. iso标准时间转时间戳
  63. """
  64. return time.mktime(time.strptime(string, '%Y-%m-%dT%H:%M:%S.%f'))
  65. def now_iso_string():
  66. """
  67. iso标准时间
  68. """
  69. return datetime.datetime.now().isoformat('T')
  70. def now_utc_iso_string():
  71. """
  72. iso标准时间
  73. """
  74. return datetime.datetime.utcnow().isoformat('T')
  75. def now_utc_dt():
  76. """
  77. 获取当前utc时间
  78. """
  79. return datetime.datetime.utcnow()
  80. def now_dt():
  81. """
  82. 获取当前时间
  83. Example:
  84. now_dt()
  85. datetime.datetime(2020, 5, 16, 6, 15, 7, 39060)
  86. """
  87. return datetime.datetime.now()
  88. def now_ts(unit='s', ndigits=0):
  89. """
  90. 获取当前时间戳
  91. unit: 单位 (s: 秒 ms: 毫秒)
  92. ndigits: 小数点位数
  93. """
  94. unit_dict = {
  95. 'ms': 1,
  96. 's': 0,
  97. }
  98. ts = time.time()
  99. if unit_dict.get(unit):
  100. ts = ts * (1000 ** unit_dict.get(unit))
  101. if ndigits:
  102. return round(ts, ndigits)
  103. return int(ts)
  104. def today_ts():
  105. """
  106. 获取当日时间戳
  107. """
  108. today_dt = datetime.date.today()
  109. return int(time.mktime(today_dt.timetuple()))
  110. def utc_to_beijing(utc_string, pattern='%Y-%m-%dT%H:%M:%S.%fZ'):
  111. """UTC时间转北京时间(+8:00)"""
  112. utc_ts = string_to_ts(utc_string, pattern=pattern)
  113. beijing_ts = utc_ts + (3600 * 8)
  114. return ts_to_string(beijing_ts, pattern='%Y-%m-%d %H:%M:%S')
  115. def beijing_to_utc(beijing_string, pattern='%Y-%m-%d %H:%M:%S'):
  116. """本地时间转UTC时间(-8:00)"""
  117. beijing_ts = string_to_ts(beijing_string, pattern=pattern)
  118. utc_ts = beijing_ts - (3600 * 8)
  119. return ts_to_string(utc_ts, pattern='%Y-%m-%dT%H:%M:%S.%fZ')
  120. if __name__ == '__main__':
  121. # t = '2020-08-02T01:00:00.000Z'
  122. # print(utc_to_beijing(t))
  123. # t = "2020-08-02T16:00:00.000Z"
  124. # d = string_to_dt(t, "%Y-%m-%dT%H:%M:%S.%fZ")
  125. # print(d)
  126. # print(datetime.datetime.now() + datetime.timedelta(minutes=-1)).strftime("%Y-%m-%d %H:%M:%S")
  127. # print(today_ts())
  128. # print(string_to_ts('2021-03-25-09-53-39', '%Y-%m-%d-%H-%M-%S'))
  129. # print(now_ts(unit='ms'))
  130. # print(now_ts(unit='s'))
  131. # print(now_ts())
  132. # out = string_to_ts('2021-07-16', '%Y-%m-%d')
  133. # print(out)
  134. a = 1729059775.443
  135. print(ts_to_string(a))
  136. # print(string_to_ts('2022-06-01 22:00:00', pattern='%Y-%m-%d %H:%M:%S')) # 1654092000