英文:
why is datetime.strptime not working unable to format?
问题
我从SQLite数据库中读取入口时间,以计算汽车停留的持续时间。日期时间目前可以插入和检索,但在格式化以进行计算时,使用datetime.strptime
函数时会出现错误。EnterTime
以文本形式存储在SQLite数据库中。
我已经打印出入口时间,并与数据库中显示的数据相匹配。我还尝试删除会阻止我进行计算的格式。以下是我收到的错误消息:
2023-02-06 16:07:46.640395
Traceback (most recent call last):
File "/media/pi/6134-E775/payment.py", line 32, in <module>
entrance_time = datetime.strptime(entrance_time_str, "%Y-%m-%d %H:%M:%S")
File "/usr/lib/python3.7/_strptime.py", line 577, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
File "/usr/lib/python3.7/_strptime.py", line 362, in _strptime
data_string[found.end():])
ValueError: unconverted data remains: .640395
这个错误是因为datetime.strptime
无法解析毫秒部分(.640395)。您可以通过修改日期时间格式字符串来解决此问题。如果您不需要毫秒部分,可以将格式字符串更改为"%Y-%m-%d %H:%M:%S"
,并丢弃毫秒数据。如下所示:
entrance_time = datetime.strptime(entrance_time_str, "%Y-%m-%d %H:%M:%S")
这将从entrance_time_str
中解析日期时间,忽略毫秒部分,并继续进行计算。希望这对您有所帮助。
英文:
i am reading a entrance time from sqlite database to calaulate the duration of the car stay.
the datetime is currenly able to insert and retrive but when formated to do calualtion it keeps give an error when using the datetime.strptime funtion.EnterTime is stored as a text in the sqlite database.
import sqlite3
import smtplib
from datetime import datetime, timedelta
# Connect to the database
conn = sqlite3.connect("py.db")
# Get current time
current_time = datetime.now()
# Define the carplate number
carplate = "SJJ4649G"
# Check if the carplate already exists in the database
cursor = conn.cursor()
query = "SELECT * FROM entrance WHERE carplate = ?"
cursor.execute(query, (carplate,))
result = cursor.fetchall()
# If the carplate already exists, send an email
if len(result) > 0:
# Get the email address from the gov_info table
query = "SELECT email FROM gov_info WHERE carplate = ?"
cursor.execute(query, (carplate,))
email_result = cursor.fetchall()
# Get the entrance time from the entrance table
query = "SELECT EnterTime FROM entrance WHERE carplate = ?"
cursor.execute(query, (carplate,))
entrance_time_str = cursor.fetchone()[0]
print (entrance_time_str)
entrance_time = datetime.strptime(entrance_time_str, "%Y-%m-%d %H:%M:%S")
# Calculate the cost
delta = current_time - entrance_time
cost = delta.total_seconds() / 3600 * 10 # 10 is the hourly rate
# Email details
email = "testcsad69@gmail.com"
password = "ufwdiqcfepqlepsn"
send_to = email_result[0][0]
subject = "Parking Fees"
message = f"The cost for parking the car with plate number {carplate} is ${cost:.2f}. The entrance time was {entrance_time} and the current time is {current_time}."
# Send the email
smtp = smtplib.SMTP('smtp.gmail.com', 587)
smtp.ehlo()
smtp.starttls()
smtp.login(email, password)
smtp.sendmail(email, send_to, f"Subject: {subject}\n\n{message}")
smtp.quit()
# If the carplate does not exist, insert it into the database
else:
query = "INSERT INTO entrance (carplate, EnterTime) VALUES (?, ?)"
cursor.execute(query, (carplate, current_time))
conn.commit()
# Close the connection
cursor.close()
conn.close()
i have printed the entrance time out and it matches the data shown in the database.
i have also tried to remove the fromating that would not let me do the calulations.
this is the error i get
2023-02-06 16:07:46.640395
Traceback (most recent call last):
File "/media/pi/6134-E775/payment.py", line 32, in <module>
entrance_time = datetime.strptime(entrance_time_str, "%Y-%m-%d %H:%M:%S")
File "/usr/lib/python3.7/_strptime.py", line 577, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
File "/usr/lib/python3.7/_strptime.py", line 362, in _strptime
data_string[found.end():])
ValueError: unconverted data remains: .640395
答案1
得分: 0
你需要在后面添加 .%f
以获取微秒部分:
entrance_time_str = '2023-02-06 16:07:46.640395' # HERE --v
entrance_time = datetime.strptime(entrance_time_str, "%Y-%m-%d %H:%M:%S.%f")
>>> entrance_time_str
'2023-02-06 16:07:46.640395'
>>> entrance_time
datetime.datetime(2023, 2, 6, 16, 7, 46, 640395)
英文:
You need to append .%f
to take microseconds:
entrance_time_str = '2023-02-06 16:07:46.640395' # HERE --v
entrance_time = datetime.strptime(entrance_time_str, "%Y-%m-%d %H:%M:%S.%f")
>>> entrance_time_str
'2023-02-06 16:07:46.640395'
>>> entrance_time
datetime.datetime(2023, 2, 6, 16, 7, 46, 640395)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论