TTime::FormatL详解
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  
 
 詳解: 
 格式串分為本地相關(guān)和本地?zé)o關(guān)格式串,也就是說和系統(tǒng)的時間日期中設(shè)置的格式是否相關(guān)。
 以下所有格式字符都要加%
 本地?zé)o關(guān): 
 %:因為%是參數(shù)字符,所以需要輸出%的時候,要用兩個連續(xù)的%%進行轉(zhuǎn)義
 *:加在%后,表示需要縮寫,比如%*T表示對分鐘進行縮寫,如果不是兩位數(shù),則去掉前導(dǎo)0
 C:6位的微秒,%C默認是6位的,%*C2表示只取前兩位,%*C4則取前4位
 S:2位的秒,加*去掉前導(dǎo)0
 T:2位的分,加*去掉前導(dǎo)0
 H:24小時制的時,加*去掉前導(dǎo)0
 I:12小時制的時,加不加*都會去掉前導(dǎo)0
 F:%F參數(shù)表示D/M/Y三個參數(shù)都是本地?zé)o關(guān)的,按照格式串原樣輸出,%F需要用在%D、%M、%Y之前
 D:2位的日,加*去掉前導(dǎo)0
 M:2位的月,加*去掉前導(dǎo)0
 Y:4位的年,加*去掉前兩個數(shù)字,比如2008只顯示08
 E:星期,英文環(huán)境下,Sunday~Saturday,加*顯示縮寫,Sun~Sat;中文環(huán)境下,星期一~星期日,加*顯示縮寫,一~日
 N:月的名稱,英文環(huán)境下,January~December,加*顯示縮寫,Jan~Dec;中文環(huán)境下,1月~12月,加*顯示縮寫,阿拉伯?dāng)?shù)字1~12。注意1月~12月數(shù)字都是阿拉伯?dāng)?shù)字,而不是漢字一~十二
 W:2位數(shù)字,當(dāng)前日期處于一年中的第幾周,加*去掉前導(dǎo)0
 X:日期后綴。例如%*D%X顯示形如3rd(三號),%D%X顯示形如02nd(二號)
 Z:3位數(shù)字,當(dāng)前日期處于一年中的第幾天,加*去掉前導(dǎo)0
 本地相關(guān):
 .:(點號)%.默認是小數(shù)點,表示分隔秒與毫秒之間的字符。可以通過TLocale::SetDecimalSeparator()設(shè)定。
 ::(冒號)%:表示獲取本地設(shè)置中的時間分隔符,緊跟一個0~3范圍的數(shù)字來指定哪一個日期分隔符。
 格 式如下:S0 XX S1 YY S2 ZZ S3,其中XX、YY、ZZ代表時分秒,S0~S3代表4個分隔符。%:0表示第一個分隔符,依此類推。需要注意的是,本地設(shè)置中的時間分隔符只提供冒號 和點號兩種字符。當(dāng)然,可以通過TLocale:: SetTimeSeparator()對4個分隔符進行設(shè)置,模擬器和真機都未試驗成功,待機狀態(tài)的時間分隔符未更改。
 /:(斜杠)%/表示獲取 本地設(shè)置中的日期分隔符,和上面一條類似。XX、YY、ZZ代表年月日,其順序可以通過 TLocale:: SetDateFormat()設(shè)置。對于分隔符,本地設(shè)置中提供4種字符以供選擇,不過只對S1和S2有效,S0和S3總是空字符。通過 SetDateSeparator()可以對4個分隔符S0~S3進行分別設(shè)定,且可以是不同的,在模擬器和真機上都試驗成功,待機狀態(tài)的日期分隔符被成 功修改,但是進入系統(tǒng)的時間日期設(shè)定時,模擬器和真機均崩潰。
 1:%1,本地設(shè)置中“年月日”順序中的第一個。年月日順序可以通過TLocale::SetDateFormat()進行設(shè)定,格式如下:
 EDateAmerican US format (mm/dd/yyyy) 此時%1是月
 EDateEuropean European format (dd/mm/yyyy) 此時%1是日
 EDateJapanese Japanese format (yyyy/mm/dd) 此時%1是年
 中國習(xí)慣上采用小日本格式
 2:%2,本地設(shè)置中“年月日”順序中的第二個。
 3:%3,本地設(shè)置中“年月日”順序中的第三個。
 4:%4,和%2冗余,本地設(shè)置中是EDateAmerican的話,%4是日;EDateEuropean、EDateJapanese的%4是月
 5:%5,和%3冗余,本地設(shè)置中是EDateAmerican、EDateEuropean的話,%4是年;EDateJapanese的%4是日
 所 以,在本地相關(guān)的格式串中(沒有%F參數(shù)),調(diào)用年月日可以直接使用%1%2%3即可,無需加上%M%D%Y(一般在需要去掉前導(dǎo)0的時候才需要加上 %*M%*D%*Y),分隔符全部使用%/1即可(因為本地的設(shè)置中只有S1和S2有效,并且是相同的),當(dāng)然年月日順序是個問題,如果需要指定順序,那 肯定用%F的本地?zé)o關(guān)格式串了,那樣簡單直觀地多,格式串也不容易寫錯。
 
 A:不管本地設(shè)置中是12小時制還是24小時制,%A表示 am/pm總是顯示。TLocale:: SetAmPmSpaceBetween()這個方法用來設(shè)置是否在時間和am/pm中間留有空格,顯然這個設(shè)置會影響到最終格式化后的字符串。%*A會 強制壓縮這個空格,不管本地是否設(shè)置了空格(需要注意的是,這里提到的本地設(shè)置,不一定在系統(tǒng)的時間日期中有設(shè)置選項,因為對于用戶而言,只需要設(shè)定常用 的幾個設(shè)置即可,比如這個AmPmSpaceBetween空格,在時間日期中就沒有設(shè)置選項,系統(tǒng)默認是有空格的)。至于格式化后的字符串中am/pm 出現(xiàn)在時間的前面還是后面,就要看格式串怎么寫了:%I:%T:%S%A,顯示10:21:36 pm,%A%I:%T:%S,顯示pm 10:21:36
 A的擴展選項:
 在A前面可以加上+或者-,
 %+A表示只有TLocale:: AmPmSymbolPosition()被設(shè)置為ELocaleAfter時,才往格式化后的字符串中插入am/pm;
 %-A表示只有TLocale:: AmPmSymbolPosition()被設(shè)置為ELocaleBefore時,才往格式化后的字符串中插入am/pm。
 很顯然TLocale:: AmPmSymbolPosition()這個設(shè)置在時間日期設(shè)置中也是沒有的。
 eg:%-A%I:%T:%S%+A這個串格式化之后的字符串中am/pm出現(xiàn)的位置和設(shè)定中的一致。
 %-A%I:%T:%S%則表示只有設(shè)定了am/pm標(biāo)志在前的情況下,am/pm才被插入到格式化后的字符串的開頭。
 B:和A唯一的區(qū)別就是只有在12小時制情況下才顯示am/pm。同樣也有%-B、%+B兩種擴展選項。
 J:判斷本地設(shè)置是12小時制還是24小時制。%J表示本地設(shè)置是12小時制的情況下,在%J之后出現(xiàn)的前導(dǎo)0都被強制去除,所以有了%J參數(shù),沒有必要再加*號。
 
 注意點:
 使用%F表示本地?zé)o關(guān)時,不能使用%1~%5參數(shù)
 不使用%F參數(shù)時,%M、%D、%Y參數(shù)不起任何作用,但是%*M、%*D、%*Y起到去除前導(dǎo)0(%*Y是取2位數(shù)年份)的作用
 SDK 中指出:當(dāng)使用%/0、%/1、%/2、%/3分隔%1~%5代表的日期的時候(或者使用%:0、%:1、%:2、%:3分隔%H、%I、%T、 %S代表的時間的時候),4個分隔符都要被指定,盡管系統(tǒng)默認S0和S3都是’/0’(空字符)。個人理解這么做是為了讓格式串盡量規(guī)范,容易被讀懂,事 實上這4個分隔符想怎么用就怎么用,不用都行,唯一的限制在于:當(dāng)使用%.分隔秒和微秒的時候,%.應(yīng)當(dāng)被放在S2和S3的中間。(其實說到底%.系統(tǒng)默 認就是點號,一般程序員也不會無聊到調(diào)用TLocale::SetDecimalSeparator()方法來更改這個分隔符的)
總結(jié)
以上是生活随笔為你收集整理的TTime::FormatL详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 《好玩游戏物品清单》实现
 - 下一篇: 工业交换机与普通交换机区别