当前位置: 首页 > news >正文

HarmonyOS ArkTS DateUtil intl 国际化格式化完整指南

文章目录概述一、两种格式化方式的对比二、getFormatTimeintl 日期时间格式化DateTimeOptions 常用配置格式化效果演示三、getFormatRange时间段格式化四、getFormatRelativeTime相对时间格式化相对时间效果演示五、Demo 演示代码六、常用格式模板对比七、自定义模板 vs intl 格式化的选择建议八、小结概述近期发现一款很有意思的HarmonyOS 三方库, 地址 pura/harmony-utils(V1.4.0) , 作者是桃花镇童长老, 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦案例demo导航展示↓↓↓↓↓↓接下来言归正传 ↓↓↓↓一、两种格式化方式的对比DateUtil提供了两套日期格式化方案方案方法特点自定义模板格式化getFormatDateStr(date, format)使用yyyy-MM-dd HH:mm:ss模板简单直观intl 国际化格式化getFormatTime/getFormatRelativeTime使用intl.DateTimeFormat支持多语言、多地区格式二、getFormatTimeintl 日期时间格式化// DateUtil.ets工具类源码/** * 格式化时间日期字符串DateTimeFormat * param date 时间日期对象 * param options 时间日期格式化选项 * param locale 包含区域设置信息的字符串如 zh-CN */staticgetFormatTime(date:Date,options:intl.DateTimeOptions{dateStyle:short,timeStyle:short,hourCycle:h24},locale:stringzh-CN):string{constdateTimeFormatnewintl.DateTimeFormat(locale,options);returndateTimeFormat.format(date);}DateTimeOptions 常用配置属性可选值说明dateStylefull/long/medium/short日期显示样式timeStylefull/long/medium/short时间显示样式hourCycleh11/h12/h23/h24小时制yearnumeric/2-digit年份格式monthnumeric/2-digit/long/short/narrow月份格式daynumeric/2-digit日期格式weekdaylong/short/narrow星期格式格式化效果演示constnownewDate(2026-05-19 20:30:45);// short 格式默认DateUtil.getFormatTime(now,{dateStyle:short,timeStyle:short});// 输出zh-CN: 2026/5/19 20:30// full 格式DateUtil.getFormatTime(now,{dateStyle:full,timeStyle:medium});// 输出zh-CN: 2026年5月19日星期二 20:30:45// 仅显示日期long 格式DateUtil.getFormatTime(now,{dateStyle:long});// 输出zh-CN: 2026年5月19日// 英文格式DateUtil.getFormatTime(now,{dateStyle:full,timeStyle:short},en-US);// 输出: Tuesday, May 19, 2026 at 8:30 PM// 自定义组合年月日 星期DateUtil.getFormatTime(now,{year:numeric,month:long,day:numeric,weekday:long});// 输出zh-CN: 2026年5月19日星期二三、getFormatRange时间段格式化// DateUtil.ets工具类源码staticgetFormatRange(startDate:Date,endDate:Date,options:intl.DateTimeOptions{dateStyle:short,timeStyle:short,hourCycle:h24},locale:stringzh-CN):string{constdateTimeFormatnewintl.DateTimeFormat(locale,options);returndateTimeFormat.formatRange(startDate,endDate);}// 使用示例活动时间段展示conststartnewDate(2026-05-19 09:00:00);constendnewDate(2026-05-19 18:00:00);DateUtil.getFormatRange(start,end,{timeStyle:short});// 输出zh-CN: 09:00 – 18:00// 跨天活动conststart2newDate(2026-05-19 20:00:00);constend2newDate(2026-05-21 22:00:00);DateUtil.getFormatRange(start2,end2,{dateStyle:medium,timeStyle:short});// 输出zh-CN: 2026年5月19日 20:00 – 2026年5月21日 22:00四、getFormatRelativeTime相对时间格式化// DateUtil.ets工具类源码/** * 格式化相对时间 * param value 相对时间格式化的数值负数过去正数未来 * param unit 单位: year|quarter|month|week|day|hour|minute|second * param options 格式化选项 * param locale 语言区域 */staticgetFormatRelativeTime(value:number,unit:string,options?:intl.RelativeTimeFormatInputOptions,locale:stringzh-CN):string{letrelativeTimeFormatnewintl.RelativeTimeFormat(locale,options);returnrelativeTimeFormat.format(value,unit);}相对时间效果演示// 过去时间负数DateUtil.getFormatRelativeTime(-3,day);// 3天前DateUtil.getFormatRelativeTime(-1,hour);// 1小时前DateUtil.getFormatRelativeTime(-30,minute);// 30分钟前DateUtil.getFormatRelativeTime(-1,month);// 上个月DateUtil.getFormatRelativeTime(-1,year);// 去年// 未来时间正数DateUtil.getFormatRelativeTime(3,day);// 3天后DateUtil.getFormatRelativeTime(1,week);// 下周DateUtil.getFormatRelativeTime(2,month);// 2个月后DateUtil.getFormatRelativeTime(1,year);// 明年// 英文格式DateUtil.getFormatRelativeTime(-3,day,undefined,en-US);// 3 days agoDateUtil.getFormatRelativeTime(1,week,undefined,en-US);// next week五、Demo 演示代码// DateUtilDemoPage.etsDemo 源码// intl.DateTimeFormat 格式化展示Column(){Text(intl.DateTimeFormat 格式化).fontSize(13).fontColor(#666).fontWeight(FontWeight.Medium).alignSelf(ItemAlign.Start).margin({bottom:8})Row(){Text(getFormatTime:).fontSize(11).fontFamily(monospace).fontColor(#D63384)Text(DateUtil.getFormatTime(newDate(),{dateStyle:full,timeStyle:medium})).fontSize(11).fontColor(#555).margin({left:4})}.width(100%).padding({top:4,bottom:4})Row(){Text(getFormatRelativeTime:).fontSize(11).fontFamily(monospace).fontColor(#D63384)Text(DateUtil.getFormatRelativeTime(-3,day)).fontSize(11).fontColor(#555).margin({left:4})}.width(100%).padding({top:4,bottom:4})}.width(100%).padding(14).backgroundColor(#FFFFFF).borderRadius(12)六、常用格式模板对比Demo 中展示了多种getFormatDateStr模板// DateUtilDemoPage.etsDemo 源码getFormatExamples():FormatExample[]{constnownewDate();return[{pattern:yyyy-MM-dd,result:DateUtil.getFormatDateStr(now,yyyy-MM-dd),desc:标准日期},{pattern:yyyy-MM-dd HH:mm:ss,result:DateUtil.getFormatDateStr(now,yyyy-MM-dd HH:mm:ss),desc:完整时间},{pattern:HH:mm:ss,result:DateUtil.getFormatDateStr(now,HH:mm:ss),desc:仅时间},{pattern:yyyy年MM月dd日,result:DateUtil.getFormatDateStr(now,yyyy年MM月dd日),desc:中文格式},{pattern:yyyy/MM/dd,result:DateUtil.getFormatDateStr(now,yyyy/MM/dd),desc:斜杠分隔},{pattern:yyyy-MM-dd fff,result:DateUtil.getFormatDateStr(now,yyyy-MM-dd fff),desc:含毫秒},];}七、自定义模板 vs intl 格式化的选择建议场景推荐方案原因数据存储/传输getFormatDateStr格式固定便于解析界面显示固定中文getFormatDateStr简单直接国际化多语言应用getFormatTime自动适配地区格式动态区间显示getFormatRange自动处理同日/跨日格式社交类相对时间getFormatRelativeTime“3天前” 比 “2026-05-16” 更友好八、小结DateUtil的国际化格式化方法基于 HarmonyOSintl模块遵循 ECMA-402 国际化标准getFormatTime支持 4 种样式full/long/medium/short 自定义组合getFormatRange自动处理时间段同日/跨日格式各不同getFormatRelativeTime输出自然语言风格的相对时间对于面向全球用户的应用建议用getFormatTime替代硬编码的getFormatDateStr让系统根据用户语言自动选择最合适的日期格式。
http://www.rkmt.cn/news/1380234.html

相关文章:

  • HarmonyOS DateUtil 日期工具入门:格式化、时间戳与今日信息
  • Claude服务治理架构升级(生产环境零停机迁移实录)
  • 迁移至 Taotoken 后开发调试过程中 API 可用性的提升感知
  • 图神经网络在粒子径迹重建中的应用:从原理到LHCb实验实践
  • 【Midjourney噪点效果终极指南】:20年AI图像工程师亲授5种可控噪点技法,告别模糊与失真
  • 如何在10分钟内实现Windows与Linux RAID的无缝数据互通:WinMD驱动完整教程
  • 【紧急预警】Midjourney即将下线--smoke专属参数(内部泄露patch v6.7):立即掌握替代方案与5套兼容性迁移Prompt(最后48小时有效)
  • 重构前必跑的3行DeepSeek诊断命令,自动输出模式推荐+风险热力图,工程师已集体收藏
  • 3个实用技巧教你用kepano-obsidian模板打造高效个人知识管理系统
  • 为什么你需要这个专业工具:3分钟解决艾尔登法环存档迁移难题的终极指南
  • DeepSeek大模型幻觉诊断指南:3步定位、4维验证、7天落地防控体系
  • Adobe-GenP 3.0:一站式Adobe Creative Cloud激活工具完全指南
  • Word怎么转PDF?2026完整教程——手把手教你4种官方与高效转换方法
  • 别让Cache拖后腿:用多层Roofline模型诊断你的程序到底卡在哪一级存储
  • 终极指南:如何利用Nucleus Co-Op实现单机游戏分屏多人同乐
  • PlayAI语音质量评测白皮书(内部泄露版):仅限TOP 500 AI工程师获取的13项黄金评估checklist
  • macOS鼠标滚动革命:如何用Mos实现触控板般的丝滑体验
  • AlwaysOnTop:5分钟掌握Windows窗口置顶神器,工作效率翻倍!
  • 通过curl命令快速测试Taotoken多模型API的连通性与返回格式
  • 3步免费解锁Cursor Pro:告别设备限制,永久享受AI编程助手高级功能
  • 四大桌面云品牌评测:从安全、体验到性价比
  • 我们给大模型接上了模糊测试,发现了20个意想不到的输出漏洞
  • 重学Qt——数据库
  • 基于ESP32的智能调酒机:物联网Web服务器与电磁阀控制实践
  • Frida动态插桩实战:Java与Native层Hook原理与工程落地
  • SciDownl:三步告别学术文献下载烦恼,科研效率提升500%
  • FM3450C 3 节串联用锂电池保护 IC
  • 昆明黄金回收价格怎么定?实测六家机构给出答案 - 黄金回收
  • 3个简单步骤:让老旧Mac重获新生运行最新macOS的终极指南
  • 云境标书AI怎么样?2026深度评测:核心亮点、真实案例与性价比全解析 - 陈工0237