我正在尝试增加时间。
我想要获得这样的小时格式: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中)的东西。
至于加法,您可以使用 timedelta
对象向 datetime
对象添加 500 毫秒:
from datetime import datetime, timedelta
t1 = datetime.utcnow()
t2 = t1 + timedelta(milliseconds=500)
因此,只要您使用 datetime
对象而不是字符串,您就可以轻松执行您想要的所有时间操作。
所以我们剩下的问题是如何格式化要显示的时间。
正如您所指出的,[:-3]
-技巧似乎是常见的解决方案,在我看来它应该可以正常工作。如果您确实关心正确舍入到最接近的舍入毫秒,则可以使用以下“舍入技巧”:
您过去一定见过这个技巧,对于 float :
def round(x):
return int(x + 0.5)
同样的想法(即添加 0.5)也可以应用于日期时间
:
def format_dt(t):
tr = t + timedelta(milliseconds=0.5)
return tr.strftime('%H:%M:%S,%f')[:-3]
我是一名优秀的程序员,十分优秀!