1# 时区 2 3## 使用场景 4 5全球各国家和地区的经度不同,地方时间也有所不同,因此划分了不同的时区。例如英国采用0时区,中国采用东8时区,中国时间要比英国快8个小时,中国北京中午12:00是英国伦敦凌晨4点。时区模块主要用于获取时区列表,同时,应用可基于获取的时区列表实现自身业务逻辑,如双时钟应用。 6 7## 开发步骤 8 9### 时区相关功能 10 111. 导入模块。 12 ```ts 13 import I18n from '@ohos.i18n'; 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 '@ohos.i18n'; 77 import Intl from '@ohos.intl'; 78 ``` 79 802. 选择时区列表中的时区放入应用偏好时区列表中。 81 ```ts 82 let appPreferredTimeZoneList = [] // 应用偏好时区列表 83 appPreferredTimeZoneList.push(timezone1); 84 appPreferredTimeZoneList.push(timezone2); 85 ``` 86 873. 遍历应用偏好时区列表,获取各时区时间。 88 ```ts 89 let locale = I18n.System.getSystemLocale(); 90 for (let i = 0 ; i < appPreferredTimeZoneList.length ; i++) { 91 let timezone = appPreferredTimeZoneList[i]; 92 let calendar = I18n.getCalendar(locale); 93 calendar.setTimeZone(timezone); //设置日历对象的时区 94 //获取年月日时分秒 95 let year = calendar.get("year"); 96 let month = calendar.get("month"); 97 let day = calendar.get("date"); 98 let hour = calendar.get("hour"); 99 let minute = calendar.get("minute"); 100 let second = calendar.get("second"); 101 } 102 ```