【问题标题】:Converting Epoch time into the datetime将纪元时间转换为日期时间
【发布时间】:2012-09-06 04:28:33
【问题描述】:

我收到的回复是一个纪元时间格式,例如

start_time = 1234566
end_time = 1234578

我想将该纪元秒转换为 MySQL 格式时间,以便我可以将差异存储在我的 MySQL 数据库中。

我试过了:

>>> import time
>>> time.gmtime(123456)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=2, tm_hour=10, tm_min=17, tm_sec=36, tm_wday=4, tm_yday=2, tm_isdst=0)

上面的结果不是我所期望的。我希望它像

2012-09-12 21:00:00

请建议我怎样才能做到这一点?

另外, 为什么我会收到TypeError: a float is required

>>> getbbb_class.end_time = 1347516459425
>>> mend = time.gmtime(getbbb_class.end_time).tm_hour
Traceback (most recent call last):
  ...
TypeError: a float is required

【问题讨论】:

    标签: python


    【解决方案1】:

    要将您的时间值(浮点数或整数)转换为格式化字符串,请使用:

    import time
    
    time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1347517370))
    

    例如:

    import time
    
    my_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1347517370))
    
    print(my_time)
    

    【讨论】:

    • time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1347517491247)) '44671-02-17 11:44:07'为什么?
    • 在您的示例中,时间“1347517491247”从何而来?您使用的是实时值吗?
    • 实际上我是从 bigbluebutton 服务器获得的价值
    • time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1347517491.247)) '2012-09-13 08:24:51'您的价值是以毫秒为单位的纪元
    • 查看docs.python.org/2/library/time.html#time.strftime以获取格式字符串中的更多信息
    【解决方案2】:

    你也可以使用datetime:

    >>> import datetime
    >>> datetime.datetime.fromtimestamp(1347517370).strftime('%c')
      '2012-09-13 02:22:50'
    

    【讨论】:

    • 在哪个时区进行转换,如果我想在特定时区怎么办。 ?
    • @garg10 可能纪元时间始终是 UTC 偏移量 0,因此字符串也是 UTC 偏移量 0。这相当于祖鲁时区 (+00:00)。你可以在这里阅读更多:timeanddate.com/time/zones/z
    • python 3中有'utcfromtimestamp'函数来获取UTC时间。
    • 使用这个答案的好处是strftime() 的日期时间版本支持更多的格式化占位符,特别是 %f 表示时间的微秒部分。由于未知的原因,time.strftime() 不支持这一点,尽管微秒可以用输入到 time.localtime() 的浮点值来表示。
    • 改为给我这个 - '“Sat Oct 31 18:30:00 2020” 。正如您所提到的 - '2012-09-13 02:22:50' 。应该是 - "%Y/%m/%d, %H:%M:%S"
    【解决方案3】:
    >>> import datetime
    >>> datetime.datetime.fromtimestamp(1347517370).strftime('%Y-%m-%d %H:%M:%S')
    '2012-09-13 14:22:50' # Local time
    

    获取 UTC:

    >>> datetime.datetime.utcfromtimestamp(1347517370).strftime('%Y-%m-%d %H:%M:%S')
      '2012-09-13 06:22:50'
    

    【讨论】:

    • doc 说它更喜欢前者
    【解决方案4】:

    这是你需要的

    In [1]: time.time()
    Out[1]: 1347517739.44904
    
    In [2]: time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(time.time()))
    Out[2]: '2012-09-13 06:31:43'
    

    请输入float 而不是int,其他TypeError 应该消失。

    mend = time.gmtime(float(getbbb_class.end_time)).tm_hour
    

    【讨论】:

      【解决方案5】:

      试试这个:

      >>> import time
      >>> time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(1347517119))
      '2012-09-12 23:18:39'
      

      同样在MySQL中,你可以FROM_UNIXTIME点赞:

      INSERT INTO tblname VALUES (FROM_UNIXTIME(1347517119))
      

      对于您的第二个问题,可能是因为getbbb_class.end_time 是一个字符串。您可以将其转换为数字,例如:float(getbbb_class.end_time)

      【讨论】:

        【解决方案6】:
        #This adds 10 seconds from now.
        from datetime import datetime
        import commands
        
        date_string_command="date +%s"
        utc = commands.getoutput(date_string_command)
        a_date=datetime.fromtimestamp(float(int(utc))).strftime('%Y-%m-%d %H:%M:%S')
        print('a_date:'+a_date)
        utc = int(utc)+10
        b_date=datetime.fromtimestamp(float(utc)).strftime('%Y-%m-%d %H:%M:%S')
        print('b_date:'+b_date)
        

        这有点罗嗦,但它来自 unix 中的 date 命令。

        【讨论】:

          【解决方案7】:

          如果您有以毫秒为单位的纪元,则可能的解决方案是将其转换为秒:

          import time
          time.ctime(milliseconds/1000)
          

          更多time功能:https://docs.python.org/3/library/time.html#functions

          【讨论】:

            【解决方案8】:

            ma​​n gmtime

            的第一个时代信息
            The ctime(), gmtime() and localtime() functions all take an argument of data type time_t which represents calendar  time.   When  inter-
                   preted  as  an absolute time value, it represents the number of seconds elapsed since 00:00:00 on January 1, 1970, Coordinated Universal
                   Time (UTC).
            

            了解时代应该如何。

            >>> time.time()
            1347517171.6514659
            >>> time.gmtime(time.time())
            (2012, 9, 13, 6, 19, 34, 3, 257, 0)
            

            只需确保您传递给time.gmtime() 的参数是整数。

            【讨论】:

              【解决方案9】:

              分享答案以清楚地区分 UTC 和本地时间转换。在使用以下方法之前,请在顶部使用import datetime

              转换为本地机器时区的日期时间

              datetime.datetime.fromtimestamp(1347517370)
              

              转换为 UTC 时区的日期时间

              datetime.datetime.utcfromtimestamp(1347517370)
              

              对于上述两种方法,如果您希望返回格式化的日期字符串,请使用以下代码块

              datetime.datetime.fromtimestamp(1347517370).strftime('%Y-%m-%d %H:%M:%S')
              datetime.datetime.utcfromtimestamp(1347517370).strftime('%Y-%m-%d %H:%M:%S')
              

              【讨论】:

                猜你喜欢
                • 2018-04-24
                • 2011-12-06
                • 2010-12-14
                • 2021-03-25
                • 2012-11-08
                • 2019-01-15
                • 2019-11-14
                • 2013-01-08
                • 2018-11-09
                相关资源
                最近更新 更多