Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python datetime utcnow()毫秒到9位?_Python_Datetime - Fatal编程技术网

Python datetime utcnow()毫秒到9位?

Python datetime utcnow()毫秒到9位?,python,datetime,Python,Datetime,我正在尝试格式化一个日期时间字符串,使毫秒表示为9位数字。如果不操纵整个字符串,我就不知道如何执行此操作。我现在有 datetime.datetime.utcnow().strftime('%Y-%m%d %H:%M:%S.%f') 我希望毫秒(%f)打印为9位,而不是默认的6位。我该怎么做 为了澄清,我不需要9位精度,我只需要打印,例如,2013-07-19 09:28:00.000544913,带有三个填充0。这是不可能的。看一看。根据它的说法,精度可以达到微秒(这是你所拥有的),而不是纳

我正在尝试格式化一个日期时间字符串,使毫秒表示为9位数字。如果不操纵整个字符串,我就不知道如何执行此操作。我现在有

datetime.datetime.utcnow().strftime('%Y-%m%d %H:%M:%S.%f')
我希望毫秒(%f)打印为9位,而不是默认的6位。我该怎么做


为了澄清,我不需要9位精度,我只需要打印,例如,2013-07-19 09:28:00.000544913,带有三个填充0。

这是不可能的。看一看。根据它的说法,精度可以达到微秒(这是你所拥有的),而不是纳秒(这是你想要的)

似乎对我有用

实际上,您应该这样做以获得正确的时间表示:

datetime.datetime.utcnow().strftime('%Y-%m%d %H:%M:%S.%f000')

首先,毫秒到9位数没有任何意义。“毫”表示“千分之一”,如3位数字所示

其次,你没有毫秒,你有微秒。
datetime
类型具有
microseconds
属性,
%f
被定义为microseconds。当然,“微”的意思是“百万分之一”,如6位数字

由于对象中没有存储纳秒,因此使用纳秒格式说明符没有多大意义。但是,如果有一个纳秒格式说明符,那么它只会是微秒,最后会有三个额外的0,你可以自己做:

'%Y-%m%d %H:%M:%S.%f000'

或者,没有人强迫你使用strtime;您可以始终使用
str.format
并包含
{:09}
字段,然后将
dt.microseconds*1000
传递给它。

毫秒意味着千分之一秒。所以一毫秒内只有3位数。打印的是微秒;一微秒只有6个数字。如果你只想用0来填充它,当然,你可以这样做:
'%Y-%m%d%H:%m:%s.%f000'
@abarnert谢谢,你给了我正确的方向,我现在有了datetime.datetime.utcnow().strftime('%Y-%m-%d%H:%m:%s.000%f')!为什么要用前导零填充?这就像想把一个半显示为1.0005。@Rothschild,你做错了。身体上是错误的。你对时间的表述不正确!让我澄清我的问题。我只想在字符串的特定部分末尾加上'000'。我有一个字符串'2013-07-19 09:28:00.000123456',我假设它是微秒,只是加了0。让我澄清一下答案:通过在小数点后加上“padding”,你将把“padding”右边的数字大小减少了三个数量级,从微秒减少到纳秒。为了进一步澄清,只有在任何数字之前添加填充才有效。你不能只是在数字中插入数字,然后期望数字仍然是数字same@SiHa:如果您试图填充一个实数(如
%S.%f
),您希望填充在数字之后,而不是在相同数字之前。@abarnert:我应该更清楚:您可以在任何实数的任何数字之前添加填充(00001.2=1.2,是吗?)。如果你在小数点的右侧,那么我同意,他们必须在末尾(1.2=1.2000)不,这是错误的。你想在末尾加上三个额外的0;否则你就是在用分数除以1000。但是你知道你现在在欺骗自己,对吧?如果你出于某种原因想要9位数字,那么就在另一端加上填充。我可能把事情弄混了,但是
000%f
纳秒与
%f
微秒不一样秒。1微秒是1000纳秒,而不是相反。据我所知,您显示的时间不正确。要使其正确,您应该将零添加到右侧。我只是尝试获得罗斯柴尔德想要的输出。我个人也觉得将零添加到右侧更有意义。这是一个有问题的任务。对于一些r伊森,时间戳就是这种格式。每一个时间戳的左边都有三个零。
'%Y-%m%d %H:%M:%S.%f000'