How to get UTC time in Python?

后端 未结 6 927
太阳男子
太阳男子 2020-12-02 10:47

I\'ve search a bunch on StackExchange for a solution but nothing does quite what I need. In JavaScript, I\'m using the following to calculate UTC time since Jan 1st 1970:

相关标签:
6条回答
  • 2020-12-02 11:14

    Try this code that uses datetime.utcnow():

    from datetime import datetime
    datetime.utcnow()
    

    For your purposes when you need to calculate an amount of time spent between two dates all that you need is to substract end and start dates. The results of such substraction is a timedelta object.

    From the python docs:

    class datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
    

    And this means that by default you can get any of the fields mentioned in it's definition - days, seconds, microseconds, milliseconds, minutes, hours, weeks. Also timedelta instance has total_seconds() method that:

    Return the total number of seconds contained in the duration. Equivalent to (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10*6) / 10*6 computed with true division enabled.

    0 讨论(0)
  • 2020-12-02 11:15

    From datetime.datetime you already can export to timestamps with method strftime. Following your function example:

    import datetime
    def UtcNow():
        now = datetime.datetime.utcnow()
        return int(now.strftime("%s"))
    

    If you want microseconds, you need to change the export string and cast to float like: return float(now.strftime("%s.%f"))

    0 讨论(0)
  • 2020-12-02 11:18

    Timezone aware with zero external dependencies:

    from datetime import datetime, timezone
    
    def utc_now():
        return datetime.utcnow().replace(tzinfo=timezone.utc)
    
    0 讨论(0)
  • 2020-12-02 11:20
    import datetime
    import pytz
    
    # datetime object with timezone awareness:
    datetime.datetime.now(tz=pytz.utc)
    
    # seconds from epoch:
    datetime.datetime.now(tz=pytz.utc).timestamp() 
    
    # ms from epoch:
    int(datetime.datetime.now(tz=pytz.utc).timestamp() * 1000) 
    
    0 讨论(0)
  • 2020-12-02 11:21

    Simple, standard library only, for modern python. Gives timezone-aware datetime, unlike datetime.utcnow(). datetimes without timezones are accidents waiting to happen.

    from datetime import datetime,timezone
    now_utc = datetime.now(timezone.utc)
    
    0 讨论(0)
  • 2020-12-02 11:31

    In the form closest to your original:

    import datetime
    
    def UtcNow():
        now = datetime.datetime.utcnow()
        return now
    

    If you need to know the number of seconds from 1970-01-01 rather than a native Python datetime, use this instead:

    return (now - datetime.datetime(1970, 1, 1)).total_seconds()
    

    Python has naming conventions that are at odds with what you might be used to in Javascript, see PEP 8. Also, a function that simply returns the result of another function is rather silly; if it's just a matter of making it more accessible, you can create another name for a function by simply assigning it. The first example above could be replaced with:

    utc_now = datetime.datetime.utcnow
    
    0 讨论(0)
提交回复
热议问题