我试图增加时间。
我希望获得这样的小时格式:13:30:45,123
(在Java中:"HH:mm:ss,SSS"
),但Python显示13:30:45,123456
("%H:%M:%S,%f"
)(6位数的微秒)
我在网上看到并找到了可能的解决方案,如:
from datetime import datetime
hour = datetime.utcnow().strftime('%H:%M:%S,%f')[:-3]
print(hour)
输出为:04:33:16,123
但这是一个糟糕的解决方案,因为如果小时是例如01:49:56,020706
,则输出为:01:49:56,020
,右边应为:01:49:56,021
(舍入)
真正的目的是,如果我增加毫秒数,甚至可以达到秒数 示例:(我想增加500微秒)
如果输入:00:01:48,557
,则输出应为:00:01:49,057
Java程序代码(工作正常)是:
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss,SSS");
System.out.print("Input the time: ");
t1 = in.next();
Date d = df.parse(t1);
Calendar cal = Calendar.getInstance();
cal.setTime(d);
cal.add(Calendar.MILLISECOND, 500);//here increase the milliseconds (microseconds)
t2 = df.format(cal.getTime());
System.out.print("The Output (+500): "+t2);
我不知道Python中是否存在类似SimpleDateFormat
(Java)的内容。
答案 0 :(得分:1)
对于添加,您可以使用datetime
对象向timedelta
对象添加500毫秒:
from datetime import datetime, timedelta
t1 = datetime.utcnow()
t2 = t1 + timedelta(milliseconds=500)
因此,只要您使用datetime
个对象而不是字符串,就可以轻松完成所有您需要的操作。
因此,我们留下了如何格式化您想要显示它的时间的问题。
正如你所指出的,[:-3]
- 技巧似乎是常见的解决方案,在我看来它应该可以正常工作。如果你真的关心正确地舍入到最接近的圆毫秒,你可以使用以下“舍入技巧”:
你过去一定看过这个技巧,对于花车:
def round(x):
return int(x + 0.5)
同样的想法(即添加0.5)也可以应用于datetime
s:
def format_dt(t):
tr = t + timedelta(milliseconds=0.5)
return tr.strftime('%H:%M:%S,%f')[:-3]
答案 1 :(得分:0)
您可以使用decimal
from decimal import Decimal
ts = datetime.utcnow()
sec = Decimal(ts.strftime('%S.%f'))
print ts.strftime('%H:%M:')+str(round(sec, 3))