我有一个格式化时间戳的文件 25/03/2011 9:15:00 p.m.
如何使用strptime或as.POSIXct?将此文本解析为Date-Time类?
这几乎是有效的:
> as.POSIXct("25/03/2011 9:15:00", format="%d/%m/%Y %I:%M:%S", tz="UTC")
[1] "2011-03-25 09:15:00 UTC"
Run Code Online (Sandbox Code Playgroud)
这是什么不起作用,但我想工作:
> as.POSIXct("25/03/2011 9:15:00 p.m.", format="%d/%m/%Y %I:%M:%S %p", tz="UTC")
[1] NA
Run Code Online (Sandbox Code Playgroud)
我在MS Windows上使用R版本2.13.2(2011-09-30).我的工作区域是"C":
Sys.setlocale("LC_TIME", "C")
Run Code Online (Sandbox Code Playgroud) 我在使用函数strptime()时遇到了一些意想不到的事情.我所拥有的日期格式包括"1/22/2013 11:00:00 PM".我使用的格式是"%m /%d /%Y%I:%M:%S%p".
代码如下.
strptime("1/22/2013 11:00:00 p.m",format="%m/%d/%Y %I:%M:%S %p")
[1] NA
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用
strptime("1/22/2013 11:00:00 pm",format="%m/%d/%Y %I:%M:%S %p")
[1] "2013-01-22 23:00:00"
Run Code Online (Sandbox Code Playgroud)
我得到了适当的结果.
因此,该特征缺乏检测pm及其变化(例如pm等)以代替PM或pm.这是R中的错误吗?
RI的版本在Windows 7 32位上使用R.14.2
我正在使用从Teradata导出的.csv数据.有几列原本是带时区的时间戳,所以在加载R中的.csv之后,我想将这些列(作为字符串加载)转换为POSIXlt或POSIXct.我正在使用strptime,但.csv文件中的时区格式与strptime预期的不匹配.例如,它希望-0400但.csv具有-04:00冒号分隔小时和分钟的格式.
我可以删除结肠,但这是一个额外的步骤和复杂性我想尽可能避免.有没有办法让strptime时区(%z)使用不同的格式?
这是一个例子:
## Example data:
x <- c("2011-10-12 22:17:13.860746-04:00", "2011-10-12 22:17:13.860746+00:00")
format <- "%Y-%m-%d %H:%M:%OS%z"
## Doesn't work:
strptime(x,format)
## [1] NA NA
## Ignores the timezone:
as.POSIXct(x)
## [1] "2011-10-12 22:17:13 EDT" "2011-10-12 22:17:13 EDT"
## Remove the last colon:
x2 <- gsub("(.*):", "\\1", x)
x2
## [1] "2011-10-12 22:17:13.860746-0400" "2011-10-12 22:17:13.860746+0000"
## This works, but requires extra processing (removing the colon)
strptime(x2,format)
## [1] "2011-10-12 …Run Code Online (Sandbox Code Playgroud) 键入man strptime它,这个函数需要声明_XOPEN_SOURCE并包含time.h头.我做的.但是,当我尝试编译我的代码时,我得到:
./check.c:56:警告:隐式声明函数'strptime'
看看我的代码:
int lockExpired(const char *date, const char *format, time_t current) {
struct tm *tmp = malloc(sizeof(struct tm *));
time_t lt;
int et;
strptime(date, format, tmp);
lt = mktime(tmp);
et = difftime(current, lt);
if (et < 3600)
return -et;
return 1;
}
Run Code Online (Sandbox Code Playgroud)
函数声明也是:
char *strptime(const char *s, const char *format, struct tm *tm);
谁能告诉我我的问题来自哪里?
我的日期时间是我从文本文件中读取的字符串.我想减少额外的毫秒数,但我想首先将它转换为日期时间变量.这是因为它可能采用不同的格式,具体取决于文本文件中的内容.然而,我所尝试的一切都希望我已经知道格式.请看看我在这里尝试的内容:
import time, datetime
mytime = "2015-02-16 10:36:41.387000"
myTime = time.strptime(mytime, "%Y-%m-%d %H:%M:%S.%f")
myFormat = "%Y-%m-%d %H:%M:%S"
print datetime.datetime.fromtimestamp(time.mktime(time.strptime(mytime, myFormat)))
Run Code Online (Sandbox Code Playgroud)
但这给了我这个错误:
File "python", line 10, in <module>
ValueError: unconverted data remains: .387000`
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何做一个正常的日期时间格式?在其他语言中,我可以传递各种格式,然后将其设置为新格式而不会出现问题.
我对以下代码有问题。我收到错误消息“strptime() 参数 1 必须是 str,而不是时间戳”
我想我应该做的是将日期从时间戳转换为字符串,但我不知道该怎么做。
class TweetAnalyzer:
def tweets_to_data_frame(self,ElonMuskTweets):
df = pd.DataFrame(data=[tweet.text for tweet in ElonMuskTweets],columns=['Tweets'])
df['Text length'] = np.array ([len(tweet.text)for tweet in ElonMuskTweets])
df['Date and time of creation'] = np.array ([tweet.created_at for tweet in ElonMuskTweets])
df['Likes'] = np.array ([tweet.favorite_count for tweet in ElonMuskTweets])
df['Retweets'] = np.array ([tweet.retweet_count for tweet in ElonMuskTweets])
list_of_dates = []
list_of_times = []
for date in df['Date and time of creation']:
date_time_obj = datetime.strptime(date, '%Y-%m-%d %H:%M:%S')
list_of_dates.append(date_time_obj.date())
list_of_times.append(date_time_obj.time())
df['Date'] = list_of_dates
df['Time'] = list_of_times …Run Code Online (Sandbox Code Playgroud) 我正在做以下转换和检查日期,但是,我不确定为什么以下日期保持验证为真.
不会%d只检查[01,31] + leading zeros?有没有更好,更准确的方法呢?
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main () {
struct tm tm;
char buffer [80];
char *str = "29/Jan/2012";
if (strptime (str, "%Y/%b/%d", &tm) == NULL)
exit(EXIT_FAILURE);
if (strftime (buffer,80,"%Y-%m-%d",&tm) == 0)
exit(EXIT_FAILURE);
printf("%s\n", buffer); // prints 29-01-20
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我不能为我的生活弄清楚是什么导致了这个非常奇怪的错误.
我在spyder IDE中为Windows 7运行python 2.7中的脚本.它在一个点上使用datetime.datetime.strptime.我可以运行一次代码并且看起来很好(虽然我还没有完成调试,所以异常已经引发并且还没有正常完成),然后如果我再次尝试运行它,我得到以下内容(仅回溯结束)显示):
文件"C:\ path\to\test.py",第220行,在std_imp
self.data [key] .append(dt.datetime.strptime(string_var,string_format_var))
ImportError:导入_strptime失败,因为导入lockis被保留通过另一个线程.
我没有使用Threading等运行多个线程.让代码超越这一点的唯一方法是完全重启计算机.重启spyder将无法正常工作.网络搜索似乎没有产生任何其他人的线索或迹象.
有谁知道发生了什么?这是某种GIL问题吗?什么是导入锁,为什么一旦我尝试运行代码一次,它似乎阻止我导入datetime模块的这个方法?
我正在尝试使用该strptime函数将记录转换为日期和时间格式.但是,我不确定为什么我收到错误:
要更换的项目数不是更换长度的倍数.
我尝试使用该length函数检查记录的长度,但两者具有相同的长度.
data <- DT
head(data[6])
# column
# 1 2014-12-22 23:53:48
# 2 2014-12-22 23:20:34
# 3 2014-12-22 23:20:30
# 4 2014-12-22 23:20:16
# 5 2014-12-22 23:20:07
# 6 2014-12-22 23:05:49
data[,6] <- as.character(data[,6])
temp_file <- matrix(0,nrow=nrow(data))
temp_file[1] <- strptime(data[1, 6],"%F %T")
# Warning message:
# In temp_file[1] <- strptime(data[1, 6], "%F %T") :
# number of items to replace is not a multiple of replacement length
length(temp_file[1])
# [1] 1
length(data[1,6])
# [1] …Run Code Online (Sandbox Code Playgroud) 我已经从TXT文件中读取了一个字符串数组,并使用这样一行将其保存为一个数组(超过数千个值):
dates = np.genfromtxt('filename.txt', delimiter=";", usecols=(0), dtype=None)
Run Code Online (Sandbox Code Playgroud)
接下来,我想将字符串转换为日期.我试着用这行:
dates2 = dt.datetime.strptime([dates], '"%Y-%m-%d"').date()
Run Code Online (Sandbox Code Playgroud)
但是,我收到了一个错误:
TypeError:必须是字符串,而不是列表
我发现这样的代码工作正常:
data1='"2010-02-28"'
data1_1 = dt.datetime.strptime(data1, '"%Y-%m-%d"').date()
Run Code Online (Sandbox Code Playgroud)
我应该如何处理所描述的问题?