Python display milliseconds in formatted string using `time.strftime`

I am trying to format milliseconds to formatted string preserving the milliseconds part. Here’s my code:

import time

time.strftime('%Y-%m-%d %H:%M:%S:%f', time.gmtime(1515694048121/1000.0))

where 1515694048121 is a time in milliseconds. It returns me:

2018-01-11 18:07:28:f

As we can see, the millisecond portion of time is not returned.

What is correct format to include millisecond portion of time? Is '%Y-%m-%d %H:%M:%S:%f' not correct ?

Solution:

There is the no directive mentioned in time.strftime(...) that will return you the milliseconds. Not sure from where you got the reference to use %f. In fact time.gmtime(...) holds the precision only upto seconds.

As a hack, in order to achieve this, you may explicitly format your string by preserving your milli second value as:

>>> import time

>>> time_in_ms = 1515694048121
>>> time.strftime('%Y-%m-%d %H:%M:%S:{}'.format(time_in_ms%1000), time.gmtime(time_in_ms/1000.0))
'2018-01-11 18:07:28:121'

Here’s the list of valid directives:

+-----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------+
| Directive |                                                                                                   Meaning                                                                                                   | Notes |
+-----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------+
| %a        | Locale’s abbreviated weekday name.                                                                                                                                                                          |       |
| %A        | Locale’s full weekday name.                                                                                                                                                                                 |       |
| %b        | Locale’s abbreviated month name.                                                                                                                                                                            |       |
| %B        | Locale’s full month name.                                                                                                                                                                                   |       |
| %c        | Locale’s appropriate date and time representation.                                                                                                                                                          |       |
| %d        | Day of the month as a decimal number [01,31].                                                                                                                                                               |       |
| %H        | Hour (24-hour clock) as a decimal number [00,23].                                                                                                                                                           |       |
| %I        | Hour (12-hour clock) as a decimal number [01,12].                                                                                                                                                           |       |
| %j        | Day of the year as a decimal number [001,366].                                                                                                                                                              |       |
| %m        | Month as a decimal number [01,12].                                                                                                                                                                          |       |
| %M        | Minute as a decimal number [00,59].                                                                                                                                                                         |       |
| %p        | Locale’s equivalent of either AM or PM.                                                                                                                                                                     | (1)   |
| %S        | Second as a decimal number [00,61].                                                                                                                                                                         | (2)   |
| %U        | Week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Sunday are considered to be in week 0.                                | (3)   |
| %w        | Weekday as a decimal number [0(Sunday),6].                                                                                                                                                                  |       |
| %W        | Week number of the year (Monday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Monday are considered to be in week 0.                                | (3)   |
| %x        | Locale’s appropriate date representation.                                                                                                                                                                   |       |
| %X        | Locale’s appropriate time representation.                                                                                                                                                                   |       |
| %y        | Year without century as a decimal number [00,99].                                                                                                                                                           |       |
| %Y        | Year with century as a decimal number.                                                                                                                                                                      |       |
| %z        | Time zone offset indicating a positive or negative time difference from UTC/GMT of the form +HHMM or -HHMM, where H represents decimal hour digits and M represents decimal minute digits [-23:59, +23:59]. |       |
| %Z        | Time zone name (no characters if no time zone exists).                                                                                                                                                      |       |
| %%        |                                                                                                                                                                                                             |       |
+-----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------+

Python – Using a variable as part of string formating

I searched for an answer but since it is a bit specific couldnt find an answer. A simple question for the experts (I hope).

I want to be able to use a int variable instead of the number (5) used in the code below. I hope there is a way or else I will have to put my code within if blocks which i am trying to avoid if possible (i don’t want it to go through a condition everytime in my loop).

my_array[1, 0] = '{0:.5f}'.format(a)

Is there a way for me to write the code below using a variable like:

x = 5
my_array[1, 0] = '{0:.xf}'.format(a)

Any help will be appreciated!

Solution:

Of course there is:

x = 5
a = '{1:.{0}f}'.format(x, 1.12345111)
print(a)  # -> 1.12345

Note that the following fails:

a = '{:.{}f}'.format(x, 1.12345111)

That is because the first argument to format() goes to the
first (outermost) bracket of the string and since {:1.12345111f} is invalid, an Error is raised.


If you do not want to specify the positions (0 & 1), you have to invert your input:

a = '{:.{}f}'.format(1.12345111, x)
#                    ^ now the number goes first.