关键词:
如何检查字符串是否可以解析为日期?
- 1990年1月19日
- 1990年1月19日
- 1990年1月19日
- 01/19/1990
- 01/19/90
- 1990
- 1990年1月
- 1990年1月
这些都是有效的日期。如果对第3项和上一项中的内容之间缺乏空间有任何疑虑,可以通过在字母/字符和数字之间自动插入空格(如果需要)来轻松解决。
但首先,基础知识:
我试过把它放在if statement
:
if datetime.strptime(item, '%Y') or datetime.strptime(item, '%b %d %y') or datetime.strptime(item, '%b %d %Y') or datetime.strptime(item, '%B %d %y') or datetime.strptime(item, '%B %d %Y'):
但是这是在try-except块中,并且不断返回这样的内容:
16343 time data 'JUNE1890' does not match format '%Y'
除非,它符合if
声明中的第一个条件。
为了澄清,我实际上并不需要日期的价值 - 我只是想知道它是否是。理想情况下,它会是这样的:
if item is date:
print date
else:
print "Not a date"
有没有办法做到这一点?
parse
中的dateutils.parser
函数能够将许多日期字符串格式解析为datetime
对象。
如果您只是想知道特定字符串是否可以表示或包含有效日期,您可以尝试以下简单函数:
from dateutil.parser import parse
def is_date(string, fuzzy=False):
"""
Return whether the string can be interpreted as a date.
:param string: str, string to check for date
:param fuzzy: bool, ignore unknown tokens in string if True
"""
try:
parse(string, fuzzy=fuzzy)
return True
except ValueError:
return False
然后你有:
>>> is_date("1990-12-1")
True
>>> is_date("2005/3")
True
>>> is_date("Jan 19, 1990")
True
>>> is_date("today is 2019-03-27")
False
>>> is_date("today is 2019-03-27", fuzzy=True)
True
>>> is_date("Monday at 12:01am")
True
>>> is_date("xyz_not_a_date")
False
>>> is_date("yesterday")
False
自定义解析
parse
可能会将某些字符串识别为您不希望将其视为日期的日期。例如:
- 解析
"12"
和"1999"
将返回表示当前日期的日期时间对象,其中日期和年份替换字符串中的数字 "23, 4"
和"23 4"
将被解析为datetime.datetime(2023, 4, 16, 0, 0)
。"Friday"
将在未来返回最近的星期五的日期。- 类似地,
"August"
对应于当前日期,月份更改为8月。
此外,parse
不会识别语言环境,因此不会识别英语以外的其他语言的一周或几天。
通过使用自定义parserinfo
类可以在一定程度上解决这两个问题,该类定义了如何识别月份和日期名称:
from dateutil.parser import parserinfo
class CustomParserInfo(parserinfo):
# three months in Spanish for illustration
MONTHS = [("Enero", "Enero"), ("Feb", "Febrero"), ("Marzo", "Marzo")]
然后可以将此类的实例与parse
一起使用:
>>> parse("Enero 1990")
# ValueError: Unknown string format
>>> parse("Enero 1990", parserinfo=CustomParserInfo())
datetime.datetime(1990, 1, 27, 0, 0)
如果要解析这些特定格式,可以只匹配格式列表:
txt='''
Jan 19, 1990
January 19, 1990
Jan 19,1990
01/19/1990
01/19/90
1990
Jan 1990
January1990'''
import datetime as dt
fmts = ('%Y','%b %d, %Y','%b %d, %Y','%B %d, %Y','%B %d %Y','%m/%d/%Y','%m/%d/%y','%b %Y','%B%Y','%b %d,%Y')
parsed=[]
for e in txt.splitlines():
for fmt in fmts:
try:
t = dt.datetime.strptime(e, fmt)
parsed.append((e, fmt, t))
break
except ValueError as err:
pass
# check that all the cases are handled
success=t[0] for t in parsed
for e in txt.splitlines():
if e not in success:
print e
for t in parsed:
print '":20" => ":20" => '.format(*t)
打印:
"Jan 19, 1990 " => "%b %d, %Y " => 1990-01-19 00:00:00
"January 19, 1990 " => "%B %d, %Y " => 1990-01-19 00:00:00
"Jan 19,1990 " => "%b %d,%Y " => 1990-01-19 00:00:00
"01/19/1990 " => "%m/%d/%Y " => 1990-01-19 00:00:00
"01/19/90 " => "%m/%d/%y " => 1990-01-19 00:00:00
"1990 " => "%Y " => 1990-01-01 00:00:00
"Jan 1990 " => "%b %Y " => 1990-01-01 00:00:00
"January1990 " => "%B%Y " => 1990-01-01 00:00:00
是否可以为整个strutswebapp配置统一格式的日期格式?(代码片段)
...更好的解决方案,然后使用SimpleDateFormat对象手动将日期字符串转换为日期对象。现在我有转换器类,但仍然需要配 查看详情
sh在运行脚本时检查是否有任何args与字符串匹配(代码片段)
sh在运行脚本时检查是否有任何args与字符串匹配(代码片段)
如何检查某个日期是否通过(代码片段)
我有一个“mm/yyyy”形式的字符串,我想将它与本地系统的日期进行比较。我想过要在我的月份和日历中的MONTH字段之间使用转换表,例如:Calendarcal=Calendar.getInstance();Stringdate="07/2014";Stringmonth=date.subString(0,2);intmonthToCompare;if(month.eq... 查看详情
检查字符串是否格式为dd.mm.yyyy(代码片段)
我想检查一个字符串是否格式为dd.mm.yyyy,就像if(myStringisinformatdd.mm.yyyy)NSLog(@"Ok");elseNSLog(@"No");答案你可以使用这样的代码:NSString*dateString=@"01.01.1970";NSDateFormatter*dateFormatter=[[NSDateFormatteralloc]init];dateFormatter.dateFormat=@"dd.MM.yyyy";if([da... 查看详情
是否有条件格式化自定义公式,在该公式中,我可以检查两个或多个单元格(来自该范围)是否总和成一个值?(代码片段)
基本上,这是我想作为Google表格中条件格式的自定义公式执行的操作:如果范围内的任何单元格+范围内的任何其他单元格=我指定的值;返回这些单元格(即按我说的格式格式化)。我正在做的是,我有一列约80个数字(货币)... 查看详情
#js#如何判断一个字符串是否为日期格式(代码片段)
原文链接https://www.cnblogs.com/Begin-Vic/p/8474426.htmlvardata=“2018-12-09”;//返回为false则是日期格式;isNaN(data)排除data为纯数字的情况(此处不考虑只有年份的日期,如‘2018’)if(isNaN(data)&&!isNaN(Date.parse(data))) console.log( 查看详情
phpevvalidfloat|检查给定字符串是否具有有效的float格式(代码片段)
PHP中检查值是不是为MySQL日期时间格式的快速方法?
...:01【问题描述】:有谁知道是否有内置或快速函数来检查字符串是否为MySQL日期时间格式?这是一个例子:2038-01-1903:14:07http://dev.mys 查看详情
是否有任何用于检查格式的 C 和 C++ 的 lint 工具?
】是否有任何用于检查格式的C和C++的lint工具?【英文标题】:ArethereanylinttoolsforCandC++thatcheckformatting?【发布时间】:2011-01-2708:49:45【问题描述】:我有一个被很多人感动的代码库。虽然大多数人努力保持代码格式良好(例如一... 查看详情
php检查购物车中的所有商品是否都有相同的日期(代码片段)
如何检查两个格式字符串是否兼容?(代码片段)
例子:"Something%d"and"Somethingelse%d"//Compatible"Something%d"and"Somethingelse%f"//NotCompatible"Something%d"and"Something%delse%d"//NotCompatible"Something%dand%f"and"Something%2$fand%1$d"//Compatibl 查看详情
text检查购物车中是否有任何产品具有特定的运输等级(代码片段)
json解析失败怎么解决?
...式是否正确,确保每个对象都有对应的键值对,并且所有字符串都使用双引号引用。使用JSON验证工具来检查JSON数据是否有错误。如果您使用的是第三方API,检查API文档,看看是否有任何限制或错误代码的说明。如果您使用的是... 查看详情
javascript检查日期格式(代码片段)
php检查日期是否已定义(代码片段)
基于任意格式将字符串转换为tdatetime(代码片段)
在Delphi5中是否有任何方法可以将字符串转换为TDateTime,您可以在其中指定要使用的实际格式?我正在研究一个工作处理器,它接受来自各个工作站的任务。这些任务有一系列参数,其中一些是日期,但是(不幸的是,我的控制... 查看详情