不同程序语言的时间格式字符串

所谓”时间格式字符串”就是Datetime ( Date/ Time) 数据类型和字符串之间相互转换时用的placeholder. 例如:

<?php
date_default_timezone_set("UTC");
echo date('Y-m-d'); //输出当前时间年月日: 2010-10-01
?>

大部分程序语言都提供像 ‘Y’, ‘m’, ‘d’ 这种时间格式字符串. Unfortunately, 不同语言表示时间字符串格式是类似而又不同的, 例如表示完整年份(e.g. “2010”), 不同语言可能使用”Y”, “YYYY” 或 “yyyy”, 极易互相混淆. 基本上除了经常查文档没有什么好办法.

以下整理一张不同程序语言时间格式字符串对照表格, 方便查看和记忆:

Datetime Example PHP MySQL Oracle Java
Full Year (4 digits) 2010 Y %Y YYYY yyyy
Year (last 2 digits) 98, 05 y %y YY yy
Month Num (2 digits with leading zero) 02, 11 m %m mm MM
Month Num (no leading zero) 2, 11 n %c M
Month Abbreviation (3 letters) Jan, Dec M %b Mon MMM
Month Fullname January, December F %M Month MMMMM
Day Num (2 digits with leading zeros) 06, 26 d %d dd dd
Day Num (without leading zeros) 6, 26 j %e d
Day with ordinal suffix of montd 0th, 1st, 2nd, 3rd, 26th   jS %D FMddtd
Day Abbreviation in week (3 letters) Mon, Tue, Sun D %a Dy EEE
Day Fullname in week Sunday, Saturday l %W Day EEEEE
Hour (12-hour format, with leading zero) 01, 12 h %h or %I HH or HH12 hh
Hour (12-hour format, without leading zero)   1, 12 g %l FMHH or FMHH12   h
Hour (24-hour format, with leading zero) 00, 23 H %H HH24 HH
Hour (24-hour format, without leading zero)   0, 23 G %k FMHH24 H
AM / PM (Uppercase) AM, PM A %p a
AM / PM (Lowercase) am, pm a
Minutes (with leading zero) 00, 59 i %i MI mm
Minutes (without leading zero) 0, 59 j FMMI m
Seconds (2 letters with leading zero) 00, 59 s %s or %S   SS ss
Seconds (2 letters without leading zero) 0, 59 FMSS s
Timestamp (in seconds) a very long integer U
Timezone +0600, -1000 O Z

其它时间格式:
RFC-2822: “Wed, 11 Jan 1984 05:00:00 +0000”, php的 ‘r’ 格式符
ISO-8601: “2004-02-12T15:19:21+00:00”, php的 ‘c’ 格式符

(HTTP header中Last-Modified等时间字段格式是RFC变种 = =: “Wed, 11 Jan 1984 05:00:00 GMT”)

说明:
1. PHP:
输出Datetime为字符串:

<?php
date_default_timezone_set("UTC"); // 参数为时区标识符 如Atlantic/Azores
echo date($format = 'Y-m-d', $time); //输出UTC时间字符串, $time为Unix时间戳(秒数).
?>

时间格式符中可以用 ” 转义 (literal字符串中要写成 ‘\’ )

2. MySQL:
DATETIME字段类型

/* 查询 时间指定格式 */
SELECT DATE_FORMAT(datetimefield, '%W %M %Y') from sth;

/* 直接select时间字段, 返回 '2009-10-04 22:23:00'格式 */
SELECT datetimefield from sth;

/* 插入时间 */
insert into tableName(datetimefield) values('2009-10-04 22:23:00');

DATE和TIME字段格式则分别为’2009-10-04’和’22:23:00′

转义符是’%’, ‘%%’表示字面上的一个’%’字符

3. Oracle
Oracle的时间格式字符串大小写影响返回时间大小写. FM只能出现在开头, 表示去掉时间中所有前导零和空白

select to_char(sysdate, 'YYYY/mm/dd') from sth; /*返回 2010/01/08*/
select to_char(sysdate, 'FMYYYY/mm/dd') from sth; /*返回 2010/1/8*/

select to_char(sysdate, 'Month') from sth; /* 返回 'July' */
select to_char(sysdate, 'month') from sth; /* 返回 'july' */
select to_char(sysdate, 'MONTH') from sth; /* 返回 'JULY' */

/* 插入时间 */
insert into tableName(datetimefield) values( to_date('2010-06-17 04:14:25', 'YYYY-mm-dd HH24:MI:SS') );

4. Java

import java.text.SimpleDateFormat;
import java.util.Date;

Date d = new Date();
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = f.format(d);
Date d2 = f.parse(s);

0 Responses to “不同程序语言的时间格式字符串”


Comments are currently closed.