日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TTime::FormatL 详解

發布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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都是’’(空字符)。個人理解這么做是為了讓格式串盡量規范,容易被讀懂,事實上這4個分隔符想怎么用就怎么用,不用都行,唯一的限制在于:當使用%.分隔秒和微秒的時候,%.應當被放在S2和S3的中間。(其實說到底%.系統默認就是點號,一般程序員也不會無聊到調用TLocale::SetDecimalSeparator()方法來更改這個分隔符的)



總結

以上是生活随笔為你收集整理的TTime::FormatL 详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。