TTime::FormatL详解

示例:
TTime time;
Time.HomeTime();
TBuf<32> timeBuf;
time.FormatL(timeBuf,_L(“%F%Y/%M/%D,%H:%T:%S”)); // 2008/08/16,21:22:22

详解:
格式串分为本地相关和本地无关格式串,也就是说和系统的时间日期中设置的格式是否相关。
以下所有格式字符都要加%
本地无关:
%:因为%是参数字符,所以需要输出%的时候,要用两个连续的%%进行转义
*:加在%后,表示需要缩写,比如%*T表示对分钟进行缩写,如果不是两位数,则去掉前导0
C:6位的微秒,%C默认是6位的,%*C2表示只取前两位,%*C4则取前4位
S:2位的秒,加*去掉前导0
T:2位的分,加*去掉前导0
H:24小时制的时,加*去掉前导0
I:12小时制的时,加不加*都会去掉前导0
F:%F参数表示D/M/Y三个参数都是本地无关的,按照格式串原样输出,%F需要用在%D、%M、%Y之前
D:2位的日,加*去掉前导0
M:2位的月,加*去掉前导0
Y:4位的年,加*去掉前两个数字,比如2008只显示08
E:星期,英文环境下,Sunday~Saturday,加*显示缩写,Sun~Sat;中文环境下,星期一~星期日,加*显示缩写,一~日
N:月的名称,英文环境下,January~December,加*显示缩写,Jan~Dec;中文环境下,1月~12月,加*显示缩写,阿拉伯数字1~12。注意1月~12月数字都是阿拉伯数字,而不是汉字一~十二
W:2位数字,当前日期处于一年中的第几周,加*去掉前导0
X:日期后缀。例如%*D%X显示形如3rd(三号),%D%X显示形如02nd(二号)
Z:3位数字,当前日期处于一年中的第几天,加*去掉前导0
本地相关:
.:(点号)%.默认是小数点,表示分隔秒与毫秒之间的字符。可以通过TLocale::SetDecimalSeparator()设定。
::(冒号)%:表示获取本地设置中的时间分隔符,紧跟一个0~3范围的数字来指定哪一个日期分隔符。
格 式如下:S0 XX S1 YY S2 ZZ S3,其中XX、YY、ZZ代表时分秒,S0~S3代表4个分隔符。%:0表示第一个分隔符,依此类推。需要注意的是,本地设置中的时间分隔符只提供冒号 和点号两种字符。当然,可以通过TLocale:: SetTimeSeparator()对4个分隔符进行设置,模拟器和真机都未试验成功,待机状态的时间分隔符未更改。
/:(斜杠)%/表示获取 本地设置中的日期分隔符,和上面一条类似。XX、YY、ZZ代表年月日,其顺序可以通过 TLocale:: SetDateFormat()设置。对于分隔符,本地设置中提供4种字符以供选择,不过只对S1和S2有效,S0和S3总是空字符。通过 SetDateSeparator()可以对4个分隔符S0~S3进行分别设定,且可以是不同的,在模拟器和真机上都试验成功,待机状态的日期分隔符被成 功修改,但是进入系统的时间日期设定时,模拟器和真机均崩溃。
1:%1,本地设置中“年月日”顺序中的第一个。年月日顺序可以通过TLocale::SetDateFormat()进行设定,格式如下:
EDateAmerican US format (mm/dd/yyyy) 此时%1是月
EDateEuropean European format (dd/mm/yyyy) 此时%1是日
EDateJapanese Japanese format (yyyy/mm/dd) 此时%1是年
中国习惯上采用小日本格式
2:%2,本地设置中“年月日”顺序中的第二个。
3:%3,本地设置中“年月日”顺序中的第三个。
4:%4,和%2冗余,本地设置中是EDateAmerican的话,%4是日;EDateEuropean、EDateJapanese的%4是月
5:%5,和%3冗余,本地设置中是EDateAmerican、EDateEuropean的话,%4是年;EDateJapanese的%4是日
所 以,在本地相关的格式串中(没有%F参数),调用年月日可以直接使用%1%2%3即可,无需加上%M%D%Y(一般在需要去掉前导0的时候才需要加上 %*M%*D%*Y),分隔符全部使用%/1即可(因为本地的设置中只有S1和S2有效,并且是相同的),当然年月日顺序是个问题,如果需要指定顺序,那 肯定用%F的本地无关格式串了,那样简单直观地多,格式串也不容易写错。

A:不管本地设置中是12小时制还是24小时制,%A表示 am/pm总是显示。TLocale:: SetAmPmSpaceBetween()这个方法用来设置是否在时间和am/pm中间留有空格,显然这个设置会影响到最终格式化后的字符串。%*A会 强制压缩这个空格,不管本地是否设置了空格(需要注意的是,这里提到的本地设置,不一定在系统的时间日期中有设置选项,因为对于用户而言,只需要设定常用 的几个设置即可,比如这个AmPmSpaceBetween空格,在时间日期中就没有设置选项,系统默认是有空格的)。至于格式化后的字符串中am/pm 出现在时间的前面还是后面,就要看格式串怎么写了:%I:%T:%S%A,显示10:21:36 pm,%A%I:%T:%S,显示pm 10:21:36
A的扩展选项:
在A前面可以加上+或者-,
%+A表示只有TLocale:: AmPmSymbolPosition()被设置为ELocaleAfter时,才往格式化后的字符串中插入am/pm;
%-A表示只有TLocale:: AmPmSymbolPosition()被设置为ELocaleBefore时,才往格式化后的字符串中插入am/pm。
很显然TLocale:: AmPmSymbolPosition()这个设置在时间日期设置中也是没有的。
eg:%-A%I:%T:%S%+A这个串格式化之后的字符串中am/pm出现的位置和设定中的一致。
%-A%I:%T:%S%则表示只有设定了am/pm标志在前的情况下,am/pm才被插入到格式化后的字符串的开头。
B:和A唯一的区别就是只有在12小时制情况下才显示am/pm。同样也有%-B、%+B两种扩展选项。
J:判断本地设置是12小时制还是24小时制。%J表示本地设置是12小时制的情况下,在%J之后出现的前导0都被强制去除,所以有了%J参数,没有必要再加*号。

注意点:
使用%F表示本地无关时,不能使用%1~%5参数
不使用%F参数时,%M、%D、%Y参数不起任何作用,但是%*M、%*D、%*Y起到去除前导0(%*Y是取2位数年份)的作用
SDK 中指出:当使用%/0、%/1、%/2、%/3分隔%1~%5代表的日期的时候(或者使用%:0、%:1、%:2、%:3分隔%H、%I、%T、 %S代表的时间的时候),4个分隔符都要被指定,尽管系统默认S0和S3都是’/0’(空字符)。个人理解这么做是为了让格式串尽量规范,容易被读懂,事 实上这4个分隔符想怎么用就怎么用,不用都行,唯一的限制在于:当使用%.分隔秒和微秒的时候,%.应当被放在S2和S3的中间。(其实说到底%.系统默 认就是点号,一般程序员也不会无聊到调用TLocale::SetDecimalSeparator()方法来更改这个分隔符的)

TTime::FormatL详解相关推荐

  1. Windbg调试命令详解

    Windbg调试命令详解 发表于2013 年 8 月 23 日 转载注明>> [作者:张佩][原文:http://www.yiiyee.cn/Blog] 1. 概述 用户成功安装微软Win ...

  2. C语言 程序的翻译 预处理 编译 汇编 链接 #define详解

    1.程序的翻译环境和执行环境 执行环境:所在操作系统的平台 win10 win11 linux 翻译环境:MSVC gcc g++ 你的vs 2019 和2022 是集成开发环境把编辑器编译器全部给你 ...

  3. Linux命令详解之 ls

    linux 命令详解 本文主要内容来自Linux man 手册 命令名称: ls ( list files / list directory contents )列举目录内容 命令用法: ls [选项 ...

  4. JavaMail详解

    引用自http://blog.sina.com.cn/s/articlelist_1832656582_7_1.html [JavaMail]1 基础 A.简介 JavaMail,顾名思义,提供给开发 ...

  5. (5)ps详解 (每周一个linux命令系列)

    (5)ps详解 (每周一个linux命令系列) linux命令 ps详解 引言:今天的命令是用来看进程状态的ps命令 ps 我们先看man ps ps - report a snapshot of t ...

  6. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  7. JVM年轻代,老年代,永久代详解​​​​​​​

    秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...

  8. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

  9. 通俗易懂word2vec详解词嵌入-深度学习

    https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...

  10. 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法

    深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 ...

最新文章

  1. Kaggle知识点:数据扩增方法
  2. 一、如何创建一个状态栏扩展(火狐插件扩展开发教程)
  3. boost::gregorian模块实现日期序列化的测试程序
  4. spring—AOP 的动态代理技术
  5. 兄弟姐妹们,祝大家圣诞节快乐!
  6. 栈的应用1——超级计算器(中缀与后缀表达式)C语言
  7. 12864c语言程序,LCM12864 C语言驱动程序
  8. 深度分析数据恢复原理——那些数据可以恢复那些不可以数据恢复软件
  9. translation exercise 3
  10. 计算机无法关闭密码保护,Windows 10不会关闭密码保护共享
  11. iis 支持apk json ipa下载
  12. Pandas+Pyecharts | 某APP大学生用户数据分析可视化
  13. 名创优品在香港上市:市值170亿港元 10元店也有大生意
  14. NO29、最小的K个数(应该记住大顶堆和小顶堆的区别与联系,并不难)
  15. JAVA代码怎样变成软件_怎么使JAVA程序变成可执行程序
  16. 人工智能有什么价值和意义
  17. 我对SNS游戏的初步理解
  18. 介绍一位零基础转行数据分析的好友
  19. idea插件下载很慢的解决办法
  20. 在Windows下编译iconv

热门文章

  1. OWASP TOP 10 及防御
  2. OpenBSD5.2安装图形界面
  3. CF1427F Boring Card Game
  4. 2015年秋季腾讯校园招聘开发岗笔试题二
  5. Cloudera 简介、安装和升级、管理、操作文档
  6. WOai wojiao
  7. MyBatisPlus的使用--十数个案例足以让你步入mybatisplus
  8. mysql 80070057_0x80070057错误原因
  9. 线程停止(stop/intrrupt)
  10. VS2015重装Team explorer报错