文章目錄
- 定位源碼
- 實現
- 附錄
- 12 小時制與 24 小時制的詳細解析
- 一、基本定義與核心區別
- 二、轉換方法與示例
- 三、應用場景與文化差異
- 四、延伸知識:特殊計時制與歷史背景
目的是把設置中使用默認語言區域關掉,并把使用24小時制打開
如下圖為原始的:
修改后變成這樣
定位源碼
查找Android SDK xml配置文件中的關鍵字def_time_12_24
find vendor/ -name "*.xml" | xargs grep def_time_12_24
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
find device/ -name "*.xml" | xargs grep def_time_12_24
find frameworks/base/ -name "*.xml" | xargs grep def_time_12_24
有一些工程可以直接在
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
找到
<!-- Default for Settings.System.TIME_12_24 --><string name="def_time_12_24" translatable="false">12</string>
實現
修改xml
如果能直接在xml中找到,則直接把12改成24就行了
<!-- Default for Settings.System.TIME_12_24 --><string name="def_time_12_24" translatable="false">24</string>
如果找不到,需要自行添加,這里要注意,不同的芯片廠添加的位置不一樣的。
比如mtk
vendor/mediatek/proprietary/packages/apps/SettingsProvider/res/values/defaults.xml
在最后面加上
<!-- Default for Settings.System.TIME_12_24 --><string name="def_time_12_24" translatable="false">24</string>
修改java
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
如果是mtk,則是
vendor/mediatek/proprietary/packages/apps/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
在private void loadSystemSettings(SQLiteDatabase db)函數中添加這句:
loadStringSetting(stmt, Settings.System.TIME_12_24, R.string.def_time_12_24); // 24小時時間格式
附錄
12 小時制與 24 小時制的詳細解析
一、基本定義與核心區別
- 12 小時制(12-hour clock)
- 定義:將一天分為上午(AM, Ante Meridiem)和下午 / 晚上(PM, Post Meridiem)兩個時段,每個時段 12 小時。
- 表示方式:
上午:1:00 AM - 11:59 AM(午夜 12 點為 12:00 AM)。
下午 / 晚上:1:00 PM - 11:59 PM(中午 12 點為 12:00 PM)。
例:下午 3 點表示為 3:00 PM,午夜 12 點表示為 12:00 AM。
- 24 小時制(24-hour clock)
- 定義:直接用 0:00 到 23:59 表示一天中的每個時刻,無需區分上午 / 下午。
- 表示方式:
凌晨:0:00 - 5:59。
上午:6:00 - 11:59。
下午:12:00 - 17:59。
晚上:18:00 - 23:59。
例:下午 3 點表示為 15:00,午夜 12 點表示為 00:00 或 24:00(部分場景中 24:00 用于表示一天結束)。
二、轉換方法與示例
- 12 小時制轉 24 小時制
- AM 時段:小時數不變,去掉 AM。
例:9:30 AM → 09:30(或 9:30)。 - PM 時段:小時數 + 12,去掉 PM。
例:3:15 PM → 15:15,12:00 PM → 12:00(中午)。 - 特殊情況:12:00 AM → 00:00(午夜)。
- 24 小時制轉 12 小時制
- 0:00-11:59:小時數不變,加 AM(12:00 除外)。
例:8:45 → 8:45 AM,12:00 → 12:00 PM(中午)。 - 12:00-23:59:小時數 - 12,加 PM。
例:16:20 → 4:20 PM,23:00 → 11:00 PM。
特殊情況:24:00 → 12:00 AM(午夜,僅在特定場景使用)。
三、應用場景與文化差異
- 12 小時制的常見地區:
美國、英國、加拿大等英語國家,以及部分拉丁美洲、亞洲國家(如印度)。
場景:日常對話、電視節目、社交媒體(如 “晚上 7 點見”)。 - 24 小時制的常見地區:
中國、歐洲、澳大利亞、俄羅斯等多數國家。
場景:
專業性領域:醫院(如用藥時間 “14:00”)、航空(航班起飛時間 “06:30”)、軍事(“22:00 時發動進攻”)。
公共服務:交通時刻表(火車 “19:45 開”)、公共設施開放時間(“08:00-22:00”)。
文化差異影響:
12 小時制更符合自然語言習慣,但可能因 AM/PM 遺漏導致誤解(如 “12 點見面” 可能指中午或午夜)。
24 小時制因無歧義性,更適用于需要精確計時的場景(如科研、工業生產)。
四、延伸知識:特殊計時制與歷史背景
- 軍事時間(Military Time):本質是 24 小時制,但表述方式不同(如 “1500 小時” 表示 15:00,讀作 “fifteen hundred hours”)。
- 歷史起源:12 小時制起源于古埃及(將白天和黑夜各分為 12 小時),24 小時制則在工業革命后因標準化需求逐漸普及。
- 技術應用:計算機系統、編程中普遍使用 24 小時制(如 Unix 時間戳以 00:00:00 為起點)。
作者:帥得不敢出門