Using %f with strftime() in Python to get microseconds

前端 未结 8 1919
渐次进展
渐次进展 2020-11-29 21:32

I\'m trying to use strftime() to microsecond precision, which seems possible using %f (as stated here). However when I try the following code:

import time
im         


        
相关标签:
8条回答
  • 2020-11-29 21:48

    With Python's time module you can't get microseconds with %f.

    For those who still want to go with time module only, here is a workaround:

    now = time.time()
    mlsec = repr(now).split('.')[1][:3]
    print time.strftime("%Y-%m-%d %H:%M:%S.{} %Z".format(mlsec), time.localtime(now))
    

    You should get something like 2017-01-16 16:42:34.625 EET (yes, I use milliseconds as it's fairly enough).

    To break the code into details, paste the below code into a Python console:

    import time
    
    # Get current timestamp
    now = time.time()
    
    # Debug now
    now
    print now
    type(now)
    
    # Debug strf time
    struct_now = time.localtime(now)
    print struct_now
    type(struct_now)
    
    # Print nicely formatted date
    print time.strftime("%Y-%m-%d %H:%M:%S %Z", struct_now)
    
    # Get miliseconds
    mlsec = repr(now).split('.')[1][:3]
    print mlsec
    
    # Get your required timestamp string
    timestamp = time.strftime("%Y-%m-%d %H:%M:%S.{} %Z".format(mlsec), struct_now)
    print timestamp
    

    For clarification purposes, I also paste my Python 2.7.12 result here:

    >>> import time
    >>> # get current timestamp
    ... now = time.time()
    >>> # debug now
    ... now
    1484578293.519106
    >>> print now
    1484578293.52
    >>> type(now)
    <type 'float'>
    >>> # debug strf time
    ... struct_now = time.localtime(now)
    >>> print struct_now
    time.struct_time(tm_year=2017, tm_mon=1, tm_mday=16, tm_hour=16, tm_min=51, tm_sec=33, tm_wday=0, tm_yday=16, tm_isdst=0)
    >>> type(struct_now)
    <type 'time.struct_time'>
    >>> # print nicely formatted date
    ... print time.strftime("%Y-%m-%d %H:%M:%S %Z", struct_now)
    2017-01-16 16:51:33 EET
    >>> # get miliseconds
    ... mlsec = repr(now).split('.')[1][:3]
    >>> print mlsec
    519
    >>> # get your required timestamp string
    ... timestamp = time.strftime("%Y-%m-%d %H:%M:%S.{} %Z".format(mlsec), struct_now)
    >>> print timestamp
    2017-01-16 16:51:33.519 EET
    >>>
    
    0 讨论(0)
  • 2020-11-29 21:51

    You can use datetime's strftime function to get this. The problem is that time's strftime accepts a timetuple that does not carry microsecond information.

    from datetime import datetime
    datetime.now().strftime("%H:%M:%S.%f")
    

    Should do the trick!

    0 讨论(0)
  • 2020-11-29 21:52

    This should do the work

    import datetime
    datetime.datetime.now().strftime("%H:%M:%S.%f")
    

    It will print

    HH:MM:SS.microseconds like this e.g 14:38:19.425961

    0 讨论(0)
  • 2020-11-29 21:52

    You can also get microsecond precision from the time module using its time() function.
    (time.time() returns the time in seconds since epoch. Its fractional part is the time in microseconds, which is what you want.)

    >>> from time import time
    >>> time()
    ... 1310554308.287459   # the fractional part is what you want.
    
    
    # comparision with strftime -
    >>> from datetime import datetime
    >>> from time import time
    >>> datetime.now().strftime("%f"), time()
    ... ('287389', 1310554310.287459)
    
    0 讨论(0)
  • 2020-11-29 21:59

    When the "%f" for micro seconds isn't working, please use the following method:

    import datetime
    
    def getTimeStamp():
        dt = datetime.datetime.now()
        return dt.strftime("%Y%j%H%M%S") + str(dt.microsecond)
    
    0 讨论(0)
  • 2020-11-29 22:02

    You are looking at the wrong documentation. The time module has different documentation.

    You can use the datetime module strftime like this:

    >>> from datetime import datetime
    >>>
    >>> now = datetime.now()
    >>> now.strftime("%H:%M:%S.%f")
    '12:19:40.948000'
    
    0 讨论(0)
提交回复
热议问题