GVKun编程网logo

pandas将具有unix时间戳(以毫秒为单位)的行转换为日期时间(pandas时间戳转化为时间)

30

本文将分享pandas将具有unix时间戳的详细内容,并且还将对以毫秒为单位的行转换为日期时间进行详尽解释,此外,我们还将为大家带来关于date–如何设置当前的Unix时间(以毫秒为单位)?、Free

本文将分享pandas将具有unix时间戳的详细内容,并且还将对以毫秒为单位的行转换为日期时间进行详尽解释,此外,我们还将为大家带来关于date – 如何设置当前的Unix时间(以毫秒为单位)?、Freemarker 将时间戳(以毫秒为单位)转换为带时区的日期、log4j ConversionPattern时间戳(以微秒为单位)、log4j:当前时间(以毫秒为单位)的相关知识,希望对你有所帮助。

本文目录一览:

pandas将具有unix时间戳(以毫秒为单位)的行转换为日期时间(pandas时间戳转化为时间)

pandas将具有unix时间戳(以毫秒为单位)的行转换为日期时间(pandas时间戳转化为时间)

我需要处理大量CSV文件,其中时间戳始终是代表以毫秒为单位的unix时间戳的字符串。我找不到有效修改这些列的方法。

这就是我想出的,但是,这当然只重复了该列,而我不得不以某种方式将其放回原始数据集。我确定创建DataFrame?时可以做到。

import sysif sys.version_info[0] < 3:    from StringIO import StringIOelse:    from io import StringIOimport pandas as pddata = ''RUN,UNIXTIME,VALUE\n1,1447160702320,10\n2,1447160702364,20\n3,1447160722364,42''df = pd.read_csv(StringIO(data))convert = lambda x: datetime.datetime.fromtimestamp(x / 1e3)converted_df = df[''UNIXTIME''].apply(convert)

这将选择“ UNIXTIME”列,并将其更改为

0    14471607023201    14471607023642    1447160722364Name: UNIXTIME, dtype: int64

进入这个

0   2015-11-10 14:05:02.3201   2015-11-10 14:05:02.3642   2015-11-10 14:05:22.364Name: UNIXTIME, dtype: datetime64[ns]

但是,我想使用类似的方法pd.apply()来获取转换后的列返回的整个数据集,或者像我已经写的那样,仅在从CSV生成DataFrame时创建日期时间。

答案1

小编典典

您可以使用to_datetimearg并将其传递为后处理步骤unit=''ms''

In [5]:df[''UNIXTIME''] = pd.to_datetime(df[''UNIXTIME''], unit=''ms'')dfOut[5]:   RUN                UNIXTIME  VALUE0    1 2015-11-10 13:05:02.320     101    2 2015-11-10 13:05:02.364     202    3 2015-11-10 13:05:22.364     42

date – 如何设置当前的Unix时间(以毫秒为单位)?

date – 如何设置当前的Unix时间(以毫秒为单位)?

可能解决方案
date --set="2011-12-07 01:20:15.962"  && date --rfc-3339=ns

原始问题

我可以像毫秒一样得到日期:

date +"%s.%N"
date --rfc-3339=ns

根据man date,我希望能够这样设置:

date --set=%s.%N +`date +"%s.%N"`
date --set="%s.%N" "+1323217126.085882000"

根据my googling我希望能够像这样设置日期(与上面相反):

date +%s.%N -s `date +"%s.%N"`
date +"%s.%N" -s "1323217126.085882000"

都没有工作.有人能在这个问题上提醒我吗?

附:不,我不需要纳秒分辨率.是的,我知道bash执行需要几毫秒.我真正需要的是亚秒级分辨率,十分之一秒就足够了.

这是一个解决方案(Linux,而不是Unix):
date --set="2011-12-07 01:20:15.962"  && date --rfc-3339=ns

注意延迟:

CURTIME=`date --rfc-3339=ns`
date --set="${CURTIME}"    
NEWTIME=`date --rfc-3339=ns`
echo ${CURTIME}
echo ${NEWTIME}

2011-12-07 01:48:54.687216122+00:00
2011-12-07 01:48:54.720541318+00:00

正如您将注意到的,引入了整整毫秒的延迟.这是由于为初始化内存和加载日期二进制文件所花费的时间.这适用于所有shell和insert-higher-level-language-exec的exec

但是,如果你只需要在10秒钟范围内的亚秒级分辨率,这在很多情况下都足够好了.

Freemarker 将时间戳(以毫秒为单位)转换为带时区的日期

Freemarker 将时间戳(以毫秒为单位)转换为带时区的日期

如何解决Freemarker 将时间戳(以毫秒为单位)转换为带时区的日期?

我可以使用以下格式将毫秒转换为日期:

${createdTime?number_to_datetime?string("yyyy-MM-dd HH:mm:ss")}

输出为:2021-07-22 11:02:38

现在我想给它添加一个时区 Asia/Colombo,有什么办法可以给 freemarker number_to_datetime 格式添加一个时区吗?

解决方法

从 2.3.31 开始,您无法直接将时区传递给 ?string。 (您可以使用 ?iso(timeZone) 和它的朋友,但只能输出 ISO 格式。)

但是,您可以使用 <#setting time_zone=''Asia/Colombo''> 更改时区。之后,所有内容都将在该时区进行格式化(我的意思是在同一个顶级模板执行期间)。不过,这可能是不需要的,您想将其改回原来的样子。在那种情况下,想法是这样的:

<#macro withTimeZone tz>
  <#local lastTZ = .time_zone>
  <#setting time_zone = tz>
  <#nested>
  <#setting time_zone = lastTZ>
</#macro>

所以现在你可以这样做了:

<@withTimeZone "Asia/Colombo">${.now?string(''yyyy-MM-dd HH:mm:ss'')}</@>

当然,您也可以用它包围更大的模板部分。

请注意,.time_zone 是在 FreeMarker 2.3.31 中添加的。

log4j ConversionPattern时间戳(以微秒为单位)

log4j ConversionPattern时间戳(以微秒为单位)

我想在用log4j生成的日志文件的每个条目的时间戳中添加微秒,这可能吗?

我已经搜索了官方文档,但是没有提到毫秒以下的单位。

现在我有一个转换模式,如下所示:

%d{dd/MM/yyyy HH\:mm\:ss,SSS} %-5p [%t] - %m%n

在日期转换模式( %d* )中,我想在毫秒值( SSS )之后添加 微秒 ,有没有办法做到这一点? *

答案1

小编典典

如果要显示微秒,则需要自己添加。可以使用自定义格式化程序(而不是PatternFormatter)来完成

log4j:当前时间(以毫秒为单位)

log4j:当前时间(以毫秒为单位)

log4j.properties我可以设置PatternLayout例如("[%p] %c - %m - %d %n")

是否有任何符号(%something)以毫秒为单位返回当前时间?

关于pandas将具有unix时间戳以毫秒为单位的行转换为日期时间的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于date – 如何设置当前的Unix时间(以毫秒为单位)?、Freemarker 将时间戳(以毫秒为单位)转换为带时区的日期、log4j ConversionPattern时间戳(以微秒为单位)、log4j:当前时间(以毫秒为单位)的相关知识,请在本站寻找。

本文标签: