尝试把字符串 s 解释为日期和时间的表示形式。如果尝试成功,则返回指示的时间,用该时间与历元(1970 年 1 月 1 日,00:00:00 gmt)的时间差来表示(以毫秒为单位)。如果尝试失败,则抛出 illegalargumentexception。
它接受许多语法;特别是它识别 ietf 标准日期语法:"sat, 12 aug 1995 13:30:00 gmt"。它也了解美国大陆时区缩写,但对于一般用途,应该使用时区偏移量:"sat, 12 aug 1995 13:30:00 gmt+0430"(比格林威治子午线晚 4 小时 30 分)。如果没有指定时区,则假定用本地时区。gmt 和 utc 被认为是相同的。
系统将从左到右处理字符串 s,从中查找相应的数据。s 中包括在 ascii 括号字符 ( 和 ) 中的任何内容都将被忽略。括号可以进行嵌套。另外,s 中只允许使用以下 ascii 字符:
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
0123456789,+-:/
以及空白字符。
连续的十进制位序列被当成十进制数:
- 如果数字前面有 + 或 -,并且已经识别了年份,那么数字就是一个时区偏移量。如果数字少于 24,那么它是以小时进行测量的偏移量。否则,它被认为是以分钟进行测量的偏移量,用没有标点的 24 小时时间格式来表示。前面的 - 意味着向西的偏移量。时区偏移量始终相对于 utc(格林威治)。因此,例如,在字符串中出现的 -5 意味着“比格林威治时间晚 5 小时”,+0430 将意味着“比格林威治时间早 4 小时 30 分”。允许字符串冗余地指定 gmt、ut 或 utc——例如,gmt-5 或 utc+0430。
- 如果下面条件之一为真,数字就被认为是年数:
- 数字等于或大于 70,并且后跟一个空格、逗号、斜杠或结束字符串
- 数字小于 70,并且已经识别月份和月中的某一天
如果被识别的年数小于 100,它就被解释为相对于其日期所在世纪的缩写年,缩写年的日期位于初始化 date 类的时间的 80 年以前和 19 年以后之间。在调整年数后,从其减去 1900。例如,如果当前的年份是 1999,那么范围 19 至 99 的年数就被假定表示 1919 至 1999,而 0 至 18 的年数就被假定表示 2000 至 2018。注意,这与 simpledateformat
中使用的小于 100 的年份具有稍微不同的解释。
- 如果数字后跟一个冒号,则认为是小时,如果小时已经被识别,则认为是分钟。
- 如果数字后跟一个斜杠,则认为是月份(把它减 1,以便产生范围 0 至 11 的数字),如果月份已经被识别,则认为它是月中的某一天。
- 如果数字后跟空白、逗号、连字符或结束字符串,那么如果小时已识别但分钟未识别,则认为是分钟;否则,如果分钟已识别,而秒没有识别,则认为是秒;否则,它被认为是月中的某一天。
连续的字母序列被认为是单词,并按以下方法进行处理:
- 忽略匹配 am(忽略大小写)的单词(但如果小时尚未识别,或者小时小于 1 或大于 12,则解析失败)。
- 匹配 pm(忽略大小写)的单词,添加 12 到小时(但如果小时尚未识别,或者小时小于 1 或大于 12,则解析失败)。
- 忽略匹配 sunday、monday、tuesday、wednesday、thursday、friday 或 saturday 的任何前缀(忽略大小写)的任何单词。例如,sat、friday、tue 和 thurs 会被忽略。
- 否则,匹配 january、february、march、april、may、june、july、august、september、october、november 或 december 的任何前缀(忽略大小写,并按这里给出的顺序考虑它们)的任何单词都被识别为指定月份,并被转换成一个数字(0 至 11)。例如,aug、sept、april 和 nov 被识别为月份。ma 也是这样,它被识别为 march,而不是 may。
- 匹配 gmt、ut 或 utc(忽略大小写)的任何单词都认为是指 utc。
- 匹配 est、cst、mst 或 pst(忽略大小写)的任何单词都被认为是指北美的时区,该时区分别比格林威治时间晚 5、6、7 或 8 小时。匹配 edt、cdt、mdt 或 pdt(忽略大小写)的任何单词都被识别为在夏令时期间分别指相同的时区。
一旦扫描了整个字符串,就以两种方式之一把它转换成时间结果。如果已经识别时区或时区偏移量,那么年、月、月中某一天、小时、分钟和秒以 utc 进行解释,然后应用时区偏移量。否则,年、月、月中某一天、小时、分钟和秒用本地时区进行解释。
- 参数:
s
- 要解析为日期的字符串。
- 返回:
- 自 1970 年 1 月 1 日 00:00:00 gmt 以来字符串参数表示的毫秒数。
- 另请参见:
dateformat