1# 时区 2 3## 使用场景 4 5全球各国家和地区的经度不同,地方时间也有所不同,因此划分了不同的时区。例如英国采用0时区,中国采用东8时区,中国时间要比英国快8个小时,中国北京中午12:00是英国伦敦凌晨4点。时区模块主要用于获取时区列表,同时,应用可基于获取的时区列表实现自身业务逻辑,如双时钟应用。 6 7## 开发步骤 8 9### 时区相关功能 10 111. 导入模块。 12 ```ts 13 import { i18n } from '@kit.LocalizationKit'; 14 ``` 15 162. 开发实例,包括获取特定时区、计算固定和实际时区偏移量、获取和遍历时区列表等。 17 ```ts 18 // 获取巴西时区 19 let timezone = i18n.getTimeZone("America/Sao_Paulo"); // 传入特定时区,创建时区类 20 let timezoneId = timezone.getID();// America/Sao_Paulo 21 22 // 获取城市Id对应的时区对象 23 let aucklandTimezone = i18n.TimeZone.getTimezoneFromCity("Auckland"); 24 let aucklandTzId = aucklandTimezone.getID(); // Pacific/Auckland 25 26 // 时区的本地化名称 27 let timeZoneName = timezone.getDisplayName("zh-Hans", true); // 巴西利亚标准时间 28 29 // 本地化城市名称 30 let cityDisplayName = i18n.TimeZone.getCityDisplayName("Auckland", "zh-Hans") // 奥克兰 (新西兰) 31 32 // 时区的固定偏移量 33 let rawOffset = timezone.getRawOffset(); // -10800000 34 35 // 时区的实际偏移量(固定偏移量+夏令时) 36 let offset = timezone.getOffset(1234567890);// -10800000 37 38 // 系统支持的时区Id列表 39 let ids = i18n.TimeZone.getAvailableIDs(); // ["America/Adak", "Asia/Hovd", "America/Sao_Paulo", "Asia/Jerusalem", "Europe/London",...] 40 41 // 系统支持的时区城市Id列表 42 let cityIdArray = i18n.TimeZone.getAvailableZoneCityIDs(); // ["Auckland", "Magadan", "Lord Howe Island",...] 43 // 遍历时区城市Id列表 44 let timezoneList: Array<object> = []; // 呈现给用户的时区列表 45 class Item { 46 cityDisplayName : string = ""; 47 timezoneId : string = ""; 48 offset : string = ""; 49 cityId : string = "" 50 } 51 for (let i =0 ; i < cityIdArray.length ; i++) { 52 let cityId = cityIdArray[i]; 53 let timezone = i18n.TimeZone.getTimezoneFromCity(cityId); // 城市Id对应的时区对象 54 let cityDisplayName = i18n.TimeZone.getCityDisplayName(cityId, "zh-CN"); // 本地化城市名称 55 let timestamp = (new Date()).getTime() 56 let item : Item = { 57 cityDisplayName : cityDisplayName, 58 timezoneId : timezone.getID(), 59 offset : 'GMT'+ (timezone.getOffset(timestamp) / 3600*1000), 60 cityId : cityId 61 } 62 timezoneList.push(item); 63 } 64 65 // 指定地理坐标所在的时区对象数组 66 let timezoneArray = i18n.TimeZone.getTimezonesByLocation(-43.1, -22.5) 67 for (let i =0;i < timezoneArray.length; i++) { 68 let tzId = timezoneArray[i].getID(); // America/Sao_Paulo 69 } 70 ``` 71 72### 双时钟应用 73 741. 导入模块。 75 ```ts 76 import { i18n } from '@kit.LocalizationKit'; 77 ``` 78 792. 选择时区列表中的时区放入应用偏好时区列表中。 80 ```ts 81 let timezone1 = i18n.getTimeZone("America/Sao_Paulo"); 82 let timezone2 = i18n.getTimeZone(); 83 let appPreferredTimeZoneList: Array<i18n.TimeZone> = [] // 应用偏好时区列表 84 appPreferredTimeZoneList.push(timezone1); 85 appPreferredTimeZoneList.push(timezone2); 86 ``` 87 883. 遍历应用偏好时区列表,获取各时区时间。 89 ```ts 90 let locale = i18n.System.getSystemLocale(); 91 for (let i = 0 ; i < appPreferredTimeZoneList.length ; i++) { 92 let timezone = appPreferredTimeZoneList[i].getID(); 93 let calendar = i18n.getCalendar(locale); 94 calendar.setTimeZone(timezone); //设置日历对象的时区 95 //获取年月日时分秒 96 let year = calendar.get("year"); 97 let month = calendar.get("month"); 98 let day = calendar.get("date"); 99 let hour = calendar.get("hour"); 100 let minute = calendar.get("minute"); 101 let second = calendar.get("second"); 102 } 103 ```