我正在这样使用strptime:
import time
time.strptime("+10:00","+%H:%M")
Run Code Online (Sandbox Code Playgroud)
但是“ +10:00”也可以是“ -10:00”(与UTC的时区偏移),这会破坏上述命令。我可以用
time.strptime("+10:00"[1:],"%H:%M")
Run Code Online (Sandbox Code Playgroud)
但理想情况下,我认为在格式代码前使用通配符更具可读性。
Python的strptime/ 是否存在这样的通配符运算符strftime?
我的云服务器以这种格式记录时间:
[17/Dec/2011:09:48:49 -0600]
Run Code Online (Sandbox Code Playgroud)
要把它读成Python变量,我可以说:
>>>str = '17/Dec/2011:09:48:49 -0600'
>>>import time
>>>print time.strptime(str,"%d/%b/%Y:%H:%M:%S -0600")
Run Code Online (Sandbox Code Playgroud)
结果:
time.struct_time(tm_year=2011, tm-mon=12, tm=mday=17, tm_hour=9, tm_min=48, tm_sec=49, tm_wday=5, tm_yday=351, tm_isdst=-1)
Run Code Online (Sandbox Code Playgroud)
或者我可以试试
>>>mytime = time.strptime(str,"%d/%b/%Y:%H:%M:%S -0600")
>>>print mytime.tm_hour
Run Code Online (Sandbox Code Playgroud)
结果:
9
Run Code Online (Sandbox Code Playgroud)
怎么-0600办?我期望它调整日期时间对象的小时值?是否有使用通配符而不是硬编码-0600?
C 中的 strptime() 函数无法检测无效日期。例如:2011-02-31、2011-04-31。此问题是否有任何其他功能或解决方法
我是C的新手.当我练习C来隐蔽时间来刺激来回构造tm时.我注意到了一些差异.请告诉我做错了什么.
#include <string.h>
#include <stdio.h>
#include <time.h>
/*
test different format string to strptime
" %A, %b %d, %X %z %Y "
" %A, %b %d, %X %Z %Y "
*/
int main(int argc,char *argv[])
{
char date[] = "6 Mar 2001 12:33:45";
char fmt[80];
struct tm tm;
if (argc==1) return 0;
strcpy(fmt,argv[1]);
memset(&tm, 0, sizeof(struct tm));
if (strptime(date,"%d %b %Y %H:%M:%S",&tm)==NULL) printf("error\n");
char buf[128];
strftime(buf, sizeof(buf), fmt, &tm);
printf("%s\n", buf);
printf("%d\n", tm.tm_isdst);
if (strptime(buf,fmt,&tm)==NULL) printf("error\n");
else {
printf("year: %d; …Run Code Online (Sandbox Code Playgroud) 我的日期是字符串,格式如下:23 Nov. 2014.当然,使用这样的表达式将此字符串转换为日期很容易:
Date.strptime(my_string, '%d %b. %Y')
Run Code Online (Sandbox Code Playgroud)
但是月份是5月还有一个问题 - 没有点,比如23 May 2014.我的表情破裂了.
有人可以帮忙解决这个问题吗?如何为我的案例制作通用表达方式?
如何临时更改/指定用于某些函数调用的语言环境设置(例如strptime())?
我只是运行了以下rvest演示:
demo("tripadvisor", package = "rvest")
当涉及到要删除日期的部分时,我遇到了一些很可能是由我的语言环境设置引起的问题:当我在德语语言环境中时,日期采用美式英语格式:
require("rvest")
url <- "http://www.tripadvisor.com/Hotel_Review-g37209-d1762915-Reviews-JW_Marriott_Indianapolis-Indianapolis_Indiana.html"
reviews <- url %>%
html() %>%
html_nodes("#REVIEWS .innerBubble")
date <- reviews %>%
html_node(".rating .ratingDate") %>%
html_attr("title")
> date
[1] "December 9, 2014" "December 9, 2014" "December 8, 2014" "December 8, 2014"
[5] "December 6, 2014" "December 5, 2014" "December 5, 2014" "December 3, 2014"
[9] "December 3, 2014" "December 3, 2014"
Run Code Online (Sandbox Code Playgroud)
基于此输出,我将使用以下格式:(%B %e, %Y或%B%e, %Y取决于“带一个空格的单位数字的实际含义”实际上是指WRT到该开头的空格;请参见参考资料?strptime)。 …
对于带有"AM或PM"的文本字符串,使用strptime在R 3.0.2版中运行良好
> strptime("8/25/2015 6:38:41 PM", "%m/%d/%Y %I:%M:%S %p")
[1] "2015-08-25 18:38:41"
Run Code Online (Sandbox Code Playgroud)
我最近升级到R 3.2.2,现在发现这个推荐返回NA:
>strptime("8/25/2015 6:38:41 PM", "%m/%d/%Y %I:%M:%S %p")
[1] NA
Run Code Online (Sandbox Code Playgroud)
它似乎与"PM"有关.如果我删除"PM"并使用如下命令,它可以工作(但当然它解释为AM而不是PM):
>strptime("8/25/2015 6:38:41", "%m/%d/%Y %H:%M:%S")
[1] "2015-08-25 06:38:41 NZST"
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
更新:
谢谢大家的意见:
我重新安装了R 3.2.2但得到了同样的错误
> strptime("8/25/2015 6:38:41 PM", "%m/%d/%Y %I:%M:%S %p")
[1] NA
Run Code Online (Sandbox Code Playgroud)
这是请求的会话信息
> sessionInfo()
R version 3.2.2 (2015-08-14)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
locale:
[1] LC_COLLATE=English_New Zealand.1252 LC_CTYPE=English_New Zealand.1252
[3] LC_MONETARY=English_New Zealand.1252 LC_NUMERIC=C
[5] LC_TIME=English_New Zealand.1252
attached base …Run Code Online (Sandbox Code Playgroud) 有没有办法比较两个日期而不是每次在python中调用strptime?我确定我的问题没有其他方法,但我想确保我已经检查了所有选项.
我正在浏览一个非常大的日志文件,每行都有一个我需要比较的日期,以查看该日期是否在其他两个日期的范围内.我不得不用strptime转换每一行的每个日期,这会导致一个巨大的瓶颈;
Fri Sep 2 15:12:43 2016 output2.file
63518075 function calls (63517618 primitive calls) in 171.409 seconds
Ordered by: cumulative time
List reduced from 571 to 10 due to restriction <10>
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.003 0.003 171.410 171.410 script.py:3(<module>)
1 0.429 0.429 171.367 171.367 scipt.py:1074(main)
1 3.357 3.357 162.009 162.009 script.py:695(get_data)
1569898 14.088 0.000 141.175 0.000 script.py:648(check_line)
1569902 6.899 0.000 71.706 0.000 {built-in method strptime}
1569902 31.198 0.000 64.805 0.000 /usr/lib64/python2.7/_strptime.py:295(_strptime)
1569876 15.324 0.000 43.170 0.000 …Run Code Online (Sandbox Code Playgroud) 这是日期时间的默认字符串表示形式:
>>> from datetime import datetime, timezone
>>> dt = datetime(2017, 1, 1, tzinfo=timezone.utc)
>>> print(dt)
2017-01-01 00:00:00+00:00
Run Code Online (Sandbox Code Playgroud)
用它解析的正确格式字符串是datetime.strptime什么?也就是说,用什么代替“ ???” 查看以下结果:
>>> from dateutil.parser import parse
>>> parse(date_str) == datetime.strptime('???', date_str)
True
Run Code Online (Sandbox Code Playgroud) 我有一个包含多年数据的 csv 文件,我需要计算两个日期(最大日期和最小日期)之间的差异,所以我相信我应该提取最大日期和最小日期。
这是我的数据:
timestamp,heure,lat,lon,impact,type
2006-01-01 00:00:00,13:58:43,33.837,-9.205,10.3,1
2006-01-02 00:00:00,00:07:28,34.5293,-10.2384,17.7,1
2007-02-01 00:00:00,23:01:03,35.0617,-1.435,-17.1,2
2007-02-02 00:00:00,01:14:29,36.5685,0.9043,36.8,1
....
2011-12-31 00:00:00,05:03:51,34.1919,-12.5061,-48.9,1
Run Code Online (Sandbox Code Playgroud)
我在我的代码中按如下方式进行:
W=np.loadtxt(dataFile,delimiter=',',dtype={'names': ('datum','timestamp','lat','lon','amp','ty'),
'formats':('S10', 'S8' ,'f4' ,'f4' ,'f4','S3' )})
day = datetime.strptime(W['datum'][0],'%Y-%m-%d')
time=[]
for i in range(W.size):
timestamp = datetime.strptime(W['datum'][i]+' '+W['timestamp'][i],'%Y-%m-%d %H:%M:%S')
Tempsfinal = max(timestamp)
Tempsinitial = min(timestamp)
interval=int((Tempsfinal- Tempsinitial)/6)
Run Code Online (Sandbox Code Playgroud)
所以,这样做我得到了错误:
datetime.datetime' 对象不可迭代
我该如何继续?