# FormatTime

转换 YYYYMMDDHH24MISS 时间戳到指定的日期/时间格式.

FormatTime, OutputVar [, YYYYMMDDHH24MISS, Format]

#### 参数

OutputVar | 用于保存结果的变量名称.
YYYYMMDD... | 此参数留空,则使用当前的本地日期和时间. 否则, 请指定 YYYYMMDDHH24MISS 格式的时间戳中所有或主要的部分. 如果时间戳中日期和/或时间部分是无效的 -- 例如平年的二月29日 -- 在 OutputVar 中日期和/或时间将被忽略. 尽管仅支持 1601 到 9999 年份, 早于1601年的时间戳仍然可以生成格式化的时间, 不过仅有其中的时间部分有效.
Format | 如果省略, 默认格式为长日期后接着时间, 它们都将根据当前用户区域设置进行格式化. 例如: 4:55 PM Saturday, November 27, 2004 否则, 请指定下面的一个或多个日期-时间格式, 以及任何原义的空格和标点符号 (逗号不需要转义; 它们可以正常使用). 在后面的例子中, 请注意 M 必须为大写: M/d/yyyy h:mm tt

#### 日期格式 (区分大小写)

d | 不含前导零的天数 (1 - 31)
dd | 含前导零的天数 (01 – 31)
ddd | 在当前的用户语言里星期几的简称 (例如 Monday)
dddd | 在当前的用户语言里星期几的全称 (例如 Monday)
M | 含前导零的月份 (1 – 12)
MM | 含前导零的月份 (01 – 12)
MMM | 在当前的用户语言里月份的简称 (例如 Jan)
MMMM | 在当前的用户语言里月份的全称 (例如 January)
y | 不含世纪的年份, 不含前导零 (0 – 99)
yy | 不含世纪的年份, 含前导零 (00 - 99)
yyyy | 含世纪的年份. 例如: 2005
gg | 当前用户区域设置的时代/纪元字符串(如果没有则为空)

#### 时间格式 (区分大小写)

h | 不含前导零的小时数; 十二小时制格式 (1 - 12)
hh | 含前导零的小时数; 十二小时制格式 (01 – 12)
H | 不含前导零的小时数; 二十四小时制格式 (0 - 23)
HH | 含前导零的小时数; 二十四小时制格式 (00– 23)
m | 不含前导零的分钟数 (0 – 59)
mm | 含前导零的分钟数 (00 – 59)
s | 不含前导零的秒数 (0 – 59)
ss | 含前导零的秒数 (00 – 59)
t | 单字符时间标记, 例如 A 或 P (取决于区域设置)
tt | 多字符时间标记, 例如 AM 或 PM (取决于区域设置)

#### 下列格式必须 单独 使用; 即在 Format 参数中不能含有其他格式或文本. 这些格式不区分大小写.

(Blank) | 留空 Format 参数则生成长日期后跟着时间. 例如, 在某些区域设置中它可能看起来像这样 4:55 PM Saturday, November 27, 2004
Time | 当前用户区域设置的时间表示, 例如 5:26 PM
ShortDate | 当前用户区域设置的短日期表示, 例如 02/29/04
LongDate | 当前用户区域设置的长日期表示, 例如 Friday, April 23, 2004
YearMonth | 当前用户区域设置的年份和月份格式, 例如 February, 2004
YDay | 不含前导零的年份的天数 (1 – 366)
YDay0 | 含前导零的年份的天数 (001 – 366)
WDay | 星期的天数 (1 – 7). 星期日为 1.
YWeek | ISO 8601 中规定的完全年份和周数. 例如: 200453. 如果新年里的含有1月1日的星期含有四天或更多, 那么它被称为是第一星期. 否则, 它是前一年的最后一周, 并且下一周才是新年的第一周. 因此, 1月4日和1月的首个星期四总是在第一周.

#### 附加选项

下列选项可以紧跟在 YYYYMMDDHH24MISS 格式的时间戳参数后 (如果没有时间戳, 它们也可以单独使用). 在下面的例子中, 请注意最后的四项间没有逗号:

    FormatTime, OutputVar, 20040228 LSys D1 D4

R: 与上述功能相反. 让日期在时间之前 (仅当 Format 为空时才有意义).

Ln: 如果此选项 不 存在, 则使用当前用户区域设置来格式化字符串. 要使用系统的区域设置, 请指定 LSys. 要使用特定的区域设置, 请指定字母 L 后面跟着十六进制或十进制的区域设置标识符 (LCID). 关于如何构建 LCID 的信息, 请在 www.microsoft.com 上搜索下列短语: Locale Identifiers

Dn: 日期选项. 请指定 n 为下列数字的其中一个:
0: 强制使用默认选项. 这也使得短日期生效.
1: 使用短日期 (仅当 Format 为空时才有意义; 与 2 和 8 不兼容).
2: 使用长日期 (仅当 Format 为空时才有意义; 与 1 和 8 不兼容).
4: 使用备用日历Use alternate calendar (如果有).
8: 使用年份-月份格式 (仅当 Format 为空时才有意义; 与 1 和 2 不兼容). 需要Windows 2000或更高版本的系统.
0x10: 为从左到右的阅读顺序布局添加标记. 仅在 Windows 2000 或更高版本的系统上才有效.
0x20: 为从右到左的阅读顺序布局添加标记. 仅在 Windows 2000 或更高版本的系统上才有效.
0x80000000: Do not obey any overrides the user may have in effect for the system's default date format.
0x40000000: 使用系统 ANSI 代码页而不是区域设置代码页进行字符串转换.

Tn: 时间选项. 请指定 n 为下列数字的其中一个:
0: 强制使用默认选项.这也使得分钟数和秒数被显示.
1: 省略分钟数和秒数.
2: 省略秒数.
4: 省略时间标记 (例如 AM/PM).
8: 始终使用二十四小时制而不是十二小时制.
12: 上面两种参数的组合.
0x80000000: Do not obey any overrides the user may have in effect for the system's default time format.
0x40000000: 使用系统 ANSI 代码页而不是区域设置代码页进行字符串转换.

请注意: Dn 和 Tn 参数可以重复多次以使多个选项生效, 例如: FormatTime, OutputVar, 20040228 D2 D4 T1 T8

#### 备注

从 Format 到 OutputVar 的转录时, 你希望原义转录的字母和数字必须包含在单引号中, 例如: 'Date:' MM/dd/yy 'Time:' hh:mm:ss tt

相比之下, 非字母数字字符, 例如空格,制表符,换行符 (`n), 斜杠,冒号,逗号和其他标点不需要包围在单引号中. 例外情况是单引号字符本身: 要产生原义的单引号, 请使用四个连续的单引号 (''''), 或仅使用两个引号如果它们已经包含在外部的一对引号中.

如果 Format 参数中同时包含日期和时间元素, 它们不能混用. 换句话说, 此字符串应该可分成两半: 一半时间,一半日期. 例如, 一个包含 "hh yyyy mm" 的格式字符串不会产生期望的结果, 因为它在两个时间元素间包含日期元素.

当 Format 参数中包含数值的天数 (d 或 dd) 跟着月份的全称 (MMMM), 则使用月份名称的所有格形式 (如果当前语言有所有格形式的话).

如果 Format 包含超过 2000 个字符, OutputVar 将被置空.

相关提示, 日期和时间的加减可以使用 EnvAdd 和 EnvSub 命令进行.

#### 相关

要进行反向的转换 -- 即 从 一个格式化的日期/时间 转到 YYYYMMDDHH24MISS 格式 -- 请参阅 www.autohotkey.com/forum/topic20405.html

请参考: Gui DateTime control, SetFormat, Transform, 内置的日期和时间变量, FileGetTime

#### 示例

    FormatTime, TimeString
    MsgBox The current time and date (time first) is %TimeString%.

    FormatTime, TimeString, R
    MsgBox The current time and date (date first) is %TimeString%.

    FormatTime, TimeString,, Time
    MsgBox The current time is %TimeString%.

    FormatTime, TimeString, T12, Time
    MsgBox The current 24-hour time is %TimeString%.

    FormatTime, TimeString,, LongDate
    MsgBox The current date (long format) is %TimeString%.

    FormatTime, TimeString, 20050423220133, dddd MMMM d, yyyy hh:mm:ss tt
    MsgBox The specified date and time, when formatted, is %TimeString%.

    FormatTime, TimeString, 200504, 'Month Name': MMMM`n'Day Name': dddd
    MsgBox %TimeString%

    FormatTime, YearWeek, 20050101, YWeek
    MsgBox January 1st of 2005 is in the following ISO year and week number: %YearWeek%

?

    ; Change the date-time stamp of a file:
    FileSelectFile, FileName, 3,, Pick a file
    if FileName =  ; The user didn't pick a file.
        return
    FileGetTime, FileTime, %FileName%
    FormatTime, FileTime, %FileTime%   ; Since the last parameter is omitted, the long date and time are retrieved.
    MsgBox The selected file was last modified at %FileTime%.

?

    ; The following function converts the specified number of seconds into the corresponding
    ; number of hours, minutes, and seconds (hh:mm:ss format).

    MsgBox % FormatSeconds(7384)  ; 7384 = 2 hours + 3 minutes + 4 seconds. It yields: 2:03:04

    FormatSeconds(NumberOfSeconds)  ; Convert the specified number of seconds to hh:mm:ss format.
    {
        time = 19990101  ; *Midnight* of an arbitrary date.
        time += %NumberOfSeconds%, seconds
        FormatTime, mmss, %time%, mm:ss
        return NumberOfSeconds//3600 ":" mmss  ; This method is used to support more than 24 hours worth of sections.
    }