【问题标题】:How to get real three digits of microseconds in Python?如何在 Python 中获得真正的三位数微秒?
【发布时间】:2014-08-17 05:42:05
【问题描述】:

我正在尝试增加时间。

我想得到这样的小时格式: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 中)之类的东西。

【问题讨论】:

    标签: python date-format


    【解决方案1】:

    至于加法,您可以使用timedelta 对象为您的datetime 对象添加500 毫秒:

    from datetime import datetime, timedelta
    t1 = datetime.utcnow()
    t2 = t1 + timedelta(milliseconds=500)
    

    因此,只要您使用 datetime 对象而不是字符串,您就可以轻松地进行所有您想要的时间操作。

    所以我们剩下的问题是如何格式化您想要显示的时间。

    正如您所指出的,[:-3]-trick 似乎是常见的解决方案,在我看来它应该可以正常工作。如果您真的关心正确舍入到最接近的舍入毫秒,可以使用以下“舍入技巧”:

    你一定在过去见过这个技巧,对于浮动:

    def round(x):
        return int(x + 0.5)
    

    同样的想法(即加0.5)也可以应用于datetimes:

    def format_dt(t):
        tr = t + timedelta(milliseconds=0.5)
        return tr.strftime('%H:%M:%S,%f')[:-3]
    

    【讨论】:

    【解决方案2】:

    您可以使用decimal对数字进行四舍五入

    from decimal import Decimal                                           
    ts = datetime.utcnow()                                   
    sec = Decimal(ts.strftime('%S.%f'))                      
    print ts.strftime('%H:%M:')+str(round(sec, 3))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 2019-12-29
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多