

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 日期时间转换函数
<a name="sql-reference-datetime-conversion-functions"></a>

您可以使用模式化字母来指定日期和时间格式。日期和时间模式字符串使用从“A”到“Z”和从“a”到“z”的未加引号的字母，每个字母都代表一个格式元素。

有关更多信息，请参阅 Oracle 网站 SimpleDateFormat上的[课程](http://docs.oracle.com/javase/7/docs/api/index.html?java/text/SimpleDateFormat.html)。

**注意**  
如果包含其他字符，则将在格式化期间合并到输出字符串中，或者在解析期间与输入字符串进行比较。

下表中的模式字母已定义（从“A”到“Z”和从“a”到“z”的所有其他字符均已保留）。


| 字母 | 日期或时间组件 | 呈现方式 | 示例 | 
| --- | --- | --- | --- | 
|  y  |  Year  |  Year  |  yyyy; yy 2018;18  | 
|  Y  |  周 年  |  Year  |  YYYY; YY 2009; 09  | 
|  M  |  年中某月  |  Month  |  MMM;MM;MM July; Jul; 07  | 
|  w  |  年中某周  |  数字  |  ww; 27  | 
|  W  |  月中某周  |  数字  |  W 2  | 
|  D  |  年中某日  |  数字  |  DDD 321  | 
|  d  |  月中某日  |  数字  |  dd 10  | 
|  F  |  月中某周某日  |  数字  |  F 2  | 
|  E  |  周中某日名称  |  文本  |  Tuesday; Tue  | 
|  u  |  周中某日编号（1 = 星期一……7 = 星期日）  |  数字  |  1  | 
|  a  |  上午/下午标记  |  文本  |  PM  | 
|  H  |  一天中的时 (0-23)  |  数字  |  0  | 
|  k  |  一天中的时 (1-24)  |  数字  |  24  | 
|  K  |  一小时过去了 am/pm (0-11)  |  数字  |  0  | 
|  h  |  一小时过去了 am/pm (1-12)  |  数字  |  12  | 
|  m  |  时中的分  |  数字  |  30  | 
|  s  |  分中的秒  |  数字  |  55  | 
|  S  |  毫秒  |  数字  |  978  | 
|  z  |  时区  |  一般时区  |  Pacific Standard Time; PST; GMT-08:00  | 
|  Z  |  时区  |  RFC 822 时区  |  -0800  | 
|  X  |  时区  |  ISO 8601 时区  |  -08; -0800; -08:00  | 



您可以按照 YYYY 的思路通过重复模式字母来确定确切的呈现方式。

**文本**  
 如果重复的模式字母数为 4 或更多，则使用完整形式；否则使用简短或缩写形式（如果有）。解析时，两种形式都可接受，与模式字母数无关。

**数字**  
格式化时，模式字母数是最小位数，较短的数字将用零填补到此数量。解析时，除非需要分隔两个相邻字段，否则模式字母数将被忽略。

**Year**  
如果格式化程序的日历是公历，则适用以下规则。
+ 格式化时，如果模式字母数为 2，则年将截断为 2 位数；否则将被解释为数字。
+ 解析时，如果模式字母数大于 2，则年按字面解释，与位数无关。因此，使用模式 “”，MM/dd/yyyy“01/11/12” 可以解析到公元 12 年 1 月 11 日。

要使用缩写的年份模式（“y” 或 “yy”）进行解析， SimpleDateFormat 必须解释相对于某个世纪的缩写年份。它通过将日期调整为创建 SimpleDateFormat 实例之前的 80 年和之后的 20 年以内来实现这一目标。例如，使用 “MM/dd/yy” 的模式和在 2018 年 1 月 1 日创建的 SimpleDateFormat 实例，字符串 “01/11/12” 将被解释为 2012 年 1 月 11 日，而字符串 “05/04/64” 将被解释为 1964 年 5 月 4 日。在解析过程中，只有由 Character.isDigit(char) 定义的恰好两位数字的字符串才会被解析为默认世纪。任何其他数字字符串，例如一位数的字符串、三位或更多位数的字符串或不全是数字的两位数字符串（例如“-1”），均按字面解释。因此，使用相同的模式，“01/02/3”或“01/02/003”将解析为公元 3 年 1 月 2 日。同样，“01/02/-3”解析为公元前 4 年 1 月 2 日。

否则，将应用日历系统特定的格式。在格式化和解析时，如果模式字母数为 4 或更多，则使用日历特定的长格式。否则，将使用日历特定的简短或缩写格式。