Python Forum
Incorrect time format - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Incorrect time format (/thread-20503.html)



Incorrect time format - KoSik - Aug-14-2019

Hello,
I have a problem with the time format.

Function excerpt:

format = '%H:%M:%S.%f'
aktual=datetime.datetime.now().time()
 
try:
        timeON = datetime.datetime.strptime(str(aktual), format) - datetime.datetime.strptime(lampaTV.AutoON, format)
except ValueError as e:
        print('Time error1:', e)
This function is called about 4 times per second and works well but after 2-4 days it throws an error e.g.
Quote:ValueError("time data '20:42:11' does not match format '%H:%M:%S.%f'",))

I can't deal with it for a long time Confused


RE: Incorrect time format - ichabod801 - Aug-14-2019

Well, it would appear that occasionally the microseconds are not being provided. It that case use a try/except block (which you seem to have already set up). In the case of an error, try the same thing but without the '.%f'.


RE: Incorrect time format - snippsat - Aug-14-2019

Do a check so it work in both cases or more if needed.
Example:
from datetime import datetime

def date_check(d):
    try:
        if '.' in d:
            return datetime.strptime(d, '%H:%M:%S.%f')
        else:
            return datetime.strptime(d, '%H:%M:%S')
    except ValueError as error:
        print(error)
        # Can log error if want it to continue on error
        # Not ideal but <pass> will also continue
 
Test:
d = '20:42:11.00567' 
>>> date_check(d)
datetime.datetime(1900, 1, 1, 20, 42, 11, 5670)
>>> 
>>> d = '20:42:11'
>>> date_check(d)
datetime.datetime(1900, 1, 1, 20, 42, 11)



RE: Incorrect time format - buran - Aug-14-2019

И guess the problem (missing microseconds) is in lampaTV.AutoON - check you have microseconds there


RE: Incorrect time format - perfringo - Aug-14-2019

Do not take it too seriously: 'format' is built-in function name and by overwriting it you live in state of sin and deserve whatever happens to you.

In more serious note:

>>> format(42, 'b')
101010
>>> format = '%H:%M:%S.%f'                                                
>>> format(42, 'b')
/.../
TypeError: 'str' object is not callable
It's late evening I am probably not the brightest, but I observe:

datetime.datetime.now() --> datetime.datetime object
datetime.datetime.now().time --> datetime.time object

From datetime.datetime object you create datetime.time object, then convert this object into string and then parse time from string and get again datetime.datetime object. As at the end you get same object type you started with I have a question - are all these conversion necessary?


RE: Incorrect time format - KoSik - Aug-15-2019

This is something like a timer. Unfortunately, I understand date / time variable in Python. Actually, I can only download a variable that records the entire date and time together - I haven't found another solution.

Naturally, my variables are saved in the correct format.
AutoON='21:00:00.0000'
The problem is that Python gets the current time in the wrong format.

Getting time without .%F is pointless, because I can't compare it with my variables in this format anyway.

Yesterday I came up with such (stupid?) idea:
    aktual=datetime.datetime.now().time()
    try:
        zmiennaON = datetime.datetime.strptime(str(aktualnie), format) - datetime.datetime.strptime(lampaTV.AutoON, format)
    except ValueError as e:
        print('Time Error1:', e)
        aktual=datetime.datetime.now().time()
        timeON = datetime.datetime.strptime(str(aktual), format) - datetime.datetime.strptime(
This is just a workaround, not a solution, but I'll try.