我有一个日期输入字段,允许用户输入日期,并且我需要验证此输入(我已经有服务器端验证),但技巧是格式取决于区域设置。我已经有一个用于将 strptime 格式字符串转换为用户首选项的系统,并且我想使用相同的格式在 Javascript 端进行验证。
strptime()有任何关于Javascript 实现的想法或链接吗?
考虑以下生日(as dob):
用Python解析时datetime.strptime(dob, '%d-%b-%y')会产生:
datetime.datetime(2068, 6, 1, 0, 0)datetime.datetime(1969, 6, 1, 0, 0)当然,他们应该出生在同一个十年,但现在甚至不是在同一个世纪!
根据文档,这是完全有效的行为:
当接受2位数年份时,它们将根据POSIX或X/Open标准进行转换:值69-99映射到1969-1999,值0-68映射到2000-2068.
我理解为什么函数设置这样,但是有办法解决这个问题吗?也许定义自己的两位数年份范围?
在大多数情况下,我们使用R将数字时间转换为posixct格式.但是,有时,我们想比较哪个时间点更早,然后我们更喜欢数字时间格式.因此,将时间格式转换为数字是非常实际的问题.例如,我的数据格式如"2001-03-13 10:31:00",
begin <- "2001-03-13 10:31:00"
Run Code Online (Sandbox Code Playgroud)
使用R,我想弄清楚如何将其转换为数字,例如Julian时间,类似于1970-01-01 00:00:00和2001-03-13 10:31:00之间的秒数.
你有什么建议吗?
朱利安历法开始于公元前45年(70年代AUC),作为朱利叶斯·凯撒对罗马历法的改革.它是在与亚历山大的天文学家Sosigenes协商后选择的,可能是为了接近热带年份(至少从Hipparchus开始就已知).见http://en.wikipedia.org/wiki/Julian_calendar
options(digits.secs = 3);
> strptime("2007-03-30 15:00:00.007", format = "%Y-%m-%d %H:%M:%OS");
[1] "2007-03-30 15:00:00.007"
> strptime("2007-03-30 15:00:00.008", format = "%Y-%m-%d %H:%M:%OS");
[1] "2007-03-30 15:00:00.008"
> strptime("2007-03-30 15:00:00.009", format = "%Y-%m-%d %H:%M:%OS");
[1] "2007-03-30 15:00:00.008"
> strptime("2007-03-30 15:00:00.010", format = "%Y-%m-%d %H:%M:%OS");
[1] "2007-03-30 15:00:00.01"
> strptime("2007-03-30 15:00:00.011", format = "%Y-%m-%d %H:%M:%OS");
[1] "2007-03-30 15:00:00.010"
> strptime("2007-03-30 15:00:00.999", format = "%Y-%m-%d %H:%M:%OS");
[1] "2007-03-30 15:00:00.998"
Run Code Online (Sandbox Code Playgroud)
我很困惑,为什么与"009"有一毫秒的差异,然后再从"011"那里得到.
我的功能有一个奇怪的问题strptime().
php手册中没有php扩展安装,它可以在PHP 5> = 5.1.0中使用.我用php 5.3.5在Windows 7上安装了wamp服务器.但是当我调用这个函数时,它会返回一个致命错误function strptime is undefined.我无法理解什么是问题.这个功能在win7中可用吗?
为什么Ruby不会strptime将其转换为DateTime对象:
DateTime.strptime('Monday 10:20:20', '%A %H:%M:%S')
# => ArgumentError: invalid date
Run Code Online (Sandbox Code Playgroud)
虽然这些工作?
DateTime.strptime('Wednesday', '%A')
# => #<DateTime: 2015-11-18T00:00:00+00:00 ((2457345j,0s,0n),+0s,2299161j)>
DateTime.strptime('10:20:20', '%H:%M:%S')
# => #<DateTime: 2015-11-18T10:20:20+00:00 ((2457345j,37220s,0n),+0s,2299161j)>
Run Code Online (Sandbox Code Playgroud) 我有一个pandas DataSeries,其中包含日期格式的字符串格式:
2016-01-14 11:39:54
我想将字符串转换为时间戳。
我正在apply尝试尝试将'datetime.strptime'传递给系列的每个元素的方法
date_series = date_string.apply(datetime.strptime, args=('%Y-%m-%d %H:%M:%S'))
运行代码时,出现以下错误:
strptime() takes exactly 2 arguments (18 given)
我的问题是(1)我是否采用正确的方法,(2)为什么strptime将我的args转换为18个参数?
这个片段
options(digits.secs=3)
s<-"12:00:00.188"
fmt<-"%I:%M:%OS"
print(strptime(s,fmt))
print(as.POSIXct(strptime(s,fmt)))
Run Code Online (Sandbox Code Playgroud)
给出了这个文本输出:
[1] "2017-09-12 00:00:00.188 CEST"
[1] "2017-09-12 00:00:00.187 CEST"
Run Code Online (Sandbox Code Playgroud)
虽然我希望上面的结果是一样的.我错过了什么?
我的会话信息:
print(sessionInfo())
Run Code Online (Sandbox Code Playgroud)
得到:
R version 3.4.0 (2017-04-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
Matrix products: default
locale:
[1] LC_COLLATE=Italian_Italy.1252 LC_CTYPE=Italian_Italy.1252 LC_MONETARY=Italian_Italy.1252 LC_NUMERIC=C
[5] LC_TIME=Italian_Italy.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_3.4.0 tools_3.4.0
Run Code Online (Sandbox Code Playgroud)
Linux中的结果相同:
R version 3.3.3 (2017-03-06)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux …Run Code Online (Sandbox Code Playgroud) 由于我的应用程序的情况,我更愿意使用datetime.strptime而不是dateutil.parser.
查看文档后,我认为这%Y-%m-%dT%H:%M:%S%z可能是解析这样的日期字符串的正确格式。但它仍然给我一个错误。
from datetime import datetime
d = '0000-00-00T00:00:00+00:00'
datetime.strptime(d, '%Y-%m-%dT%H:%M:%S%z')
Run Code Online (Sandbox Code Playgroud)
ValueError: time data '0000-00-00T00:00:00+00:00' does not
match format '%Y-%m-%dT%H:%M:%S%z'
Run Code Online (Sandbox Code Playgroud) 免责声明:问题的标题可能是错误的,因为我不知道是什么导致了这种行为。“问题”是在 RStudio 查看器中查看 POSIXlt 对象会显示一个无限链表,据我所知。
MWE:
x <- strptime("2021-01-17", format = "%Y-%m-%d")
class(x)# outputs "POSIXlt" "POSIXt"
View(x) # Opens the viewer in RStudio
Run Code Online (Sandbox Code Playgroud)
打开查看器时,您可以单击每个项目上的“展开”,它会一直向下:

我也可以通过控制台访问内容,例如输入:
x[[1]][[1]][[1]][[1]][[1]][[1]][[1]][[1]][[1]][[1]][[1]][[1]][[1]][[1]][[1]][[1]][[1]]
Run Code Online (Sandbox Code Playgroud)
输出始终相同:日期“2021-01-17 CET”。
这是什么原因造成的?我怀疑这可能是由于 RStudio 而不是 POSIXlt 类本身?我也尝试阅读?strptime文档,但没有发现有关导致此问题的函数输出的注释。