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

HarmonyOS DateUtil 日期工具入门:格式化、时间戳与今日信息

文章目录背景一、HarmonyOS 日期处理的痛点二、核心方法getFormatDate三、时间戳自动补位四、核心方法getFormatDateStr五、今日信息快速获取六、完整 Demo 演示6.1 刷新当前时间6.2 格式化演示6.3 常用格式展示6.4 基础信息 UI6.5 intl.DateTimeFormat 格式化七、格式化结果示例八、API 速查表九、小结背景近期发现一款很有意思的HarmonyOS 三方库, 地址 pura/harmony-utils(V1.4.0) , 作者是桃花镇童长老, 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦案例demo导航展示↓↓↓↓↓↓接下来言归正传 ↓↓↓↓一、HarmonyOS 日期处理的痛点在 HarmonyOS 应用开发中日期处理涉及以下常见问题时间戳格式不一致后端接口有时返回 10 位秒、有时返回 13 位毫秒日期字符串格式多样2026-05-19、2026/05/19、2026年05月19日格式化模板不同场景需要不同的日期展示格式相对时间需要显示刚刚、3分钟前而非绝对时间DateUtil封装了 HarmonyOS 的intl.DateTimeFormat和原生DateAPI解决上述所有痛点。二、核心方法getFormatDate所有日期操作的基础将任意格式的输入统一转换为Date对象staticgetFormatDate(date?:number|string|Date):Date{if(dateundefined||datenull){//无参数datenewDate();}elseif(typeofdatestring){//字符串日期if(date.length0){datenewDate();}elseif(RegexUtil.isDigits(date)){//字符串类型的时间戳10-13位datenewDate(DateUtil.padTimestamp(date));}else{constdateStrDateUtil.formatDateStr(date);datenewDate(dateStr);}}elseif(typeofdatenumber){//时间戳10-13位datenewDate(DateUtil.padTimestamp(date));}returndate;}支持的输入格式无参数 → 返回当前时间number→ 10位/13位时间戳string数字 → 字符串时间戳string日期 → 多种格式自动识别-///中文Date→ 直接返回三、时间戳自动补位privatestaticpadTimestamp(dateNum:string|number):number{lettimestamp:number;if(typeofdateNumnumber){timestampdateNum;}else{timestampNumber(dateNum).valueOf();}if(timestamp.toString().length10){timestamptimestamp*1000;//如果是10位时间戳转为13位}elseif(timestamp.toString().length11){timestamptimestamp*100;//如果是11位时间戳转为13位}elseif(timestamp.toString().length12){timestamptimestamp*10;//如果是11位时间戳转为13位}returntimestamp;}自动将 10/11/12 位时间戳补齐为 13 位毫秒解决了后端接口时间戳格式不一致的问题。四、核心方法getFormatDateStrstaticgetFormatDateStr(date:number|string|Date,format?:string):string{dateDateUtil.getFormatDate(date)if(formatundefined||format.length0){formatDATE_FORMAT1;//yyyy-MM-dd HH:mm:ss}constyeardate.getFullYear();constmonthDateUtil.padZero(date.getMonth()1);constdayDateUtil.padZero(date.getDate());consthoursDateUtil.padZero(date.getHours());constminutesDateUtil.padZero(date.getMinutes());constsecondsDateUtil.padZero(date.getSeconds());constmilliseconddate.getMilliseconds();returnformat.replace(yyyy,year.toString()).replace(MM,month).replace(dd,day).replace(HH,hours).replace(mm,minutes).replace(ss,seconds).replace(fff,millisecond.toString());}格式化占位符占位符说明示例yyyy4位年份2026MM2位月份补零05dd2位日期补零19HH2位小时24小时15mm2位分钟30ss2位秒00fff毫秒1-3位123五、今日信息快速获取staticgetToday():Date// 获取今天的 Date 对象staticgetTodayTime():number// 获取今天的时间戳毫秒staticgetTodayStr(format?:string):string// 获取今天的格式化字符串staticgetNowYear():number// 当前年staticgetNowMonth():number// 当前月1-12staticgetNowDay():number// 当前日1-31六、完整 Demo 演示来自DateUtilDemoPage.ets6.1 刷新当前时间refreshNow(){this.nowDateDateUtil.getTodayStr(yyyy-MM-dd HH:mm:ss);this.nowTimestampDateUtil.getTodayTime().toString();this.nowYearDateUtil.getNowYear().toString();this.nowMonthDateUtil.getNowMonth().toString();this.nowDayDateUtil.getNowDay().toString();this.isLeapYearDateUtil.isLeapYear()?✅ 是闰年:❌ 平年;this.addLog(Date,当前时间:${this.nowDate},info);}6.2 格式化演示doFormat(){try{constresultDateUtil.getFormatDateStr(this.formatInput,this.formatPattern);this.formatResultresult;this.addLog(Format,${this.formatInput} → ${result},success);}catch(e){this.formatResult错误:${(easError).message};this.addLog(Format,格式化失败:${(easError).message},error);}}6.3 常用格式展示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:含毫秒},];}6.4 基础信息 UI// 年月日展示Row(){Column(){Text(this.nowYear).fontSize(20).fontWeight(FontWeight.Bold).fontColor(#4080FF)Text(年).fontSize(11).fontColor(#888)}.layoutWeight(1).alignItems(HorizontalAlign.Center)Column(){Text(this.nowMonth).fontSize(20).fontWeight(FontWeight.Bold).fontColor(#4080FF)Text(月).fontSize(11).fontColor(#888)}.layoutWeight(1).alignItems(HorizontalAlign.Center)Column(){Text(this.nowDay).fontSize(20).fontWeight(FontWeight.Bold).fontColor(#4080FF)Text(日).fontSize(11).fontColor(#888)}.layoutWeight(1).alignItems(HorizontalAlign.Center)Column(){Text(DateUtil.getWeekDay(newDate()).toString()).fontSize(20).fontWeight(FontWeight.Bold).fontColor(DateUtil.isWeekend(newDate())?#FF5252:#00C853)Text(周${[日,一,二,三,四,五,六][DateUtil.getWeekDay(newDate())]}).fontSize(11).fontColor(#888)}.layoutWeight(1).alignItems(HorizontalAlign.Center)Column(){Text(DateUtil.getWeekOfMonth(newDate()).toString()).fontSize(20).fontWeight(FontWeight.Bold).fontColor(#FF9800)Text(当月第几周).fontSize(11).fontColor(#888)}.layoutWeight(1).alignItems(HorizontalAlign.Center)}6.5 intl.DateTimeFormat 格式化// getFormatTime 使用 intl.DateTimeFormatRow(){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})getFormatRelativeTime(-3, day)会输出类似3天前的本地化相对时间字符串。七、格式化结果示例以2026-05-19 15:30:45.123为例格式模板输出结果yyyy-MM-dd2026-05-19yyyy-MM-dd HH:mm:ss2026-05-19 15:30:45HH:mm:ss15:30:45yyyy年MM月dd日2026年05月19日yyyy/MM/dd2026/05/19yyyy-MM-dd fff2026-05-19 123MM月dd日05月19日八、API 速查表方法说明getFormatDate(date?)将任意格式转为 Date 对象getFormatDateStr(date, format?)格式化为指定格式的字符串getToday()获取当天 Date 对象getTodayTime()获取当天时间戳msgetTodayStr(format?)获取当天格式化字符串getNowYear/Month/Day()获取当前年/月/日isLeapYear(year?)判断是否为闰年getFormatTime(date, options?, locale?)使用 intl.DateTimeFormat 格式化getFormatRelativeTime(value, unit, ...)格式化相对时间如3天前九、小结DateUtil的日期格式化功能是其核心部分getFormatDate是基础处理了所有常见的输入格式含10/13位时间戳自动补位getFormatDateStr支持自由组合的格式模板yyyy-MM-dd HH:mm:ss fff应有尽有getFormatTime利用intl.DateTimeFormat实现本地化的日期格式getFormatRelativeTime实现3天前这类人性化的相对时间掌握这几个方法日期格式化问题迎刃而解。

相关文章:

HarmonyOS DateUtil 日期工具入门:格式化、时间戳与今日信息

文章目录背景一、HarmonyOS 日期处理的痛点二、核心方法:getFormatDate三、时间戳自动补位四、核心方法:getFormatDateStr五、今日信息快速获取六、完整 Demo 演示6.1 刷新当前时间6.2 格式化演示6.3 常用格式展示6.4 基础信息 UI6.5 intl.DateTimeForma…...

Claude服务治理架构升级(生产环境零停机迁移实录)

更多请点击: https://codechina.net 第一章:Claude服务治理架构升级(生产环境零停机迁移实录) 为应对日益增长的推理请求量与多租户策略精细化需求,我们对Claude服务治理层实施了从单体API网关向云原生服务网格的平滑…...

ThingLinks-IoT:一站式物联网平台解决方案

ThingLinks-IoT 物联网平台 | 多协议接入物模型告警联动视频接入AI 助手 一体化方案 一个面向项目交付与企业生产场景的国产物联网中台——把"设备接入 → 数据处理 → 告警联动 → 业务集成"这条链路上的通用能力一次性做完做稳,让你只关心自己的业务。 …...

机器学习加速分子晶体偏振拉曼光谱模拟:非谐效应与准谐效应的分离

1. 项目概述:当机器学习遇见偏振拉曼光谱 偏振-取向拉曼光谱(PO-Raman)一直是我在材料光谱分析领域里觉得既迷人又头疼的技术。它就像给材料的“分子指纹”加上了方向滤镜,能揭示出振动模式在空间中的对称性和各向异性&#xff0c…...

《关于 AI Agent 基础设施的一些奇思妙想》

目录 目录 目录 一、AI Agent 容器 问题背景 想法思路:API 中转站模式 多 Agent 切换 二、手机端操控 AI Agent(手机与电脑互联) 三、AI 开发依赖管理工具 总结 最近 AI Agent 越来越火,我作为一个重度使用者&#xff0c…...

红外信号逆向工程:破解电磁炉协议实现抽油烟机智能联动

1. 项目概述:当电磁炉与抽油烟机“对话”厨房里的自动化,听起来像是未来智能家居的专属,但其实很多乐趣和便利就藏在身边已有的设备里。我最近给家里的厨房换上了一台新的电磁炉,在翻阅说明书时,偶然发现了一个名为“h…...

线程池面试

线程池面试|一页极简口述满分版(高级开发必背) 一、核心概念解析(口述满分) 线程池核心作用:实现线程复用,规避线程频繁创建、销毁的性能开销,同时实现并发限流、服务熔断防护、异步…...

修复 PowerShell 7 下 conda activate 报错的指南

修复 PowerShell 7 下 conda activate 报错的指南 适用场景:升级到 PowerShell 7.x 后,conda activate 突然报错,但 Windows PowerShell 5.1 正常。 发布日期:2026-05-24 适用版本:conda 23.x PowerShell 7.x 一、问题…...

LeetCode 80 · 删除有序数组中的重复项 II:通用模板的威力

LeetCode 26 要求每个元素最多出现一次,这道题放宽到最多出现两次。看起来只是把 1 改成了 2,但这个"小改动"背后藏着一个通用的快慢指针模板——把 2 换成任意整数 m,代码几乎不用动。这就是模板的威力:改一个数字&…...

3步免费解锁Cursor Pro:告别设备限制,永久享受AI编程助手高级功能

3步免费解锁Cursor Pro:告别设备限制,永久享受AI编程助手高级功能 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: …...

ComfyUI-WanVideoWrapper深度解析:构建专业级AI视频生成工作流的完整方案

ComfyUI-WanVideoWrapper深度解析:构建专业级AI视频生成工作流的完整方案 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 在AI视频生成技术快速发展的今天,ComfyUI-WanVi…...

四大桌面云品牌评测:从安全、体验到性价比

桌面云不再是大型企业的专属,它已成为各行各业实现数据安全、混合办公和IT降本增效的“标准配置”。经过对市场主流方案的全面评估,我们认为,深信服(Sangfor)aDesk桌面云因其在安全内生化、传输协议自研化、运维管理智…...

Windows 11终极优化指南:一键清理系统,释放51%性能潜力

Windows 11终极优化指南:一键清理系统,释放51%性能潜力 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to decl…...

Armv9-A架构解析:SVE/SME与安全增强技术

1. Armv9-A架构演进与核心特性全景Armv9-A架构代表了Arm公司面向未来十年计算需求的设计哲学,其核心在于三个维度的突破:性能、安全与专用计算。作为长期从事Arm架构开发的工程师,我见证了从Armv7到Armv9的技术跃迁。与固定宽度向量指令的NEO…...

通过Taotoken用量看板清晰追踪各模型的Token消耗情况

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过Taotoken用量看板清晰追踪各模型的Token消耗情况 对于依赖大模型API进行开发的个人或团队而言,成本控制与预算规划…...

保姆级教程:在Ubuntu 22.04上搞定水星MW310UH无线网卡驱动(含安全启动关闭指南)

水星MW310UH无线网卡在Ubuntu 22.04的完整驱动指南当你刚拿到水星MW310UH无线网卡,满心欢喜地插入Ubuntu 22.04系统,却发现系统毫无反应时,那种挫败感我深有体会。作为一款性价比极高的USB无线网卡,MW310UH在Windows下即插即用&am…...

【Midjourney霓虹效果终极指南】:20年AI视觉工程师亲授5大参数组合+3类光源建模公式,97%新手一周内复刻赛博朋克海报

更多请点击: https://kaifayun.com 第一章:霓虹美学的视觉原理与Midjourney适配性解析 霓虹美学源于20世纪都市夜景中的荧光灯管、电子广告与赛博朋克文化,其核心视觉特征包括高饱和度冷暖对比、边缘辉光(glow)、深色…...

Unity开发者速查手册:Sora 2模型权重量化适配指南(INT8精度损失<0.3%,已验证于RTX 4090/Apple M3 Ultra)

更多请点击: https://codechina.net 第一章:Sora 2与Unity整合概述 Sora 2 是 OpenAI 推出的下一代视频生成模型,具备高保真时序建模与物理感知能力;而 Unity 作为主流实时3D开发引擎,广泛用于游戏、仿真与数字孪生场…...

如何用嘎嘎降AI处理金融学论文:金融学毕业论文降AI4.8元完整操作教程

如何用嘎嘎降AI处理金融学论文:金融学毕业论文降AI4.8元完整操作教程 第一次用降AI工具有很多不确定——传什么格式、选哪个模式、怎么验收。 这篇教程把金融学论文降AI教程的常见问题都覆盖了,主要基于嘎嘎降AI(www.aigcleaner.com&#x…...

第十五章:Agent产品的监控与可观测性:如何构建“看得见、管得住“的AI系统

导读 想象一下:你上线了一个客服Agent,第一个月运行平稳。第二个月开始,你陆续收到用户投诉说"答案不对"。但你的监控系统显示:请求量正常、延迟正常、错误率正常。你打开日志,发现Agent确实"成功"处理了每个请求——只是它给错了答案。 这不是监控…...

Midjourney辉光效果失效诊断手册(含12个隐性触发条件与4类GPU显存陷阱)

更多请点击: https://codechina.net 第一章:Midjourney辉光效果失效诊断手册(含12个隐性触发条件与4类GPU显存陷阱) 辉光效果(Glow Effect)在 Midjourney v6 的 --style raw 模式下常被用于强化主体边缘光…...

独立开发者如何利用Taotoken的TokenPlan在项目初期有效控制AI实验成本

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者如何利用Taotoken的TokenPlan在项目初期有效控制AI实验成本 对于独立开发者或学生而言,在构建AI应用原型时&…...

C++的单例模式及其作用

什么是单例模式?无论是在面向对象编程还是软件架构中,单例模式都扮演着至关重要的角色。它不仅能够确保一个类只有一个实例存在,还能够提供全局访问点,使得我们可以方便地在程序的任何地方使用该实例。但有几个设计模式并非解决抽…...

从‘找不到dll’到流畅运行:一份给VS2022新手的Zbar+OpenCV3.6.0环境配置避坑指南

从“找不到dll”到流畅运行:VS2022下ZbarOpenCV3.6.0环境配置全解析 当你第一次在Visual Studio 2022中尝试整合Zbar和OpenCV 3.6.0时,可能会遇到各种令人沮丧的错误提示。最常见的就是那个让人头疼的“找不到libzbar64-0.dll”问题。本文将带你一步步解…...

关于我第九次博客作业

(1)Flex布局核心概念一、Flex 是什么Flex 是 CSS3 一维弹性布局,专治元素对齐、自适应、空间分配问题,布局更高效灵活。二、两大核心角色1. 父容器(Flex容器)设置 display: flex 即为弹性父盒子,负责统一规定子元素排列…...

基于Matter与Thread协议实现本地化智能电表数据采集与家居集成

1. 项目概述:将传统电表接入智能家居的“最后一公里”家里那个不起眼的电表,每个月只在抄表员来或者收到账单时才会被想起。但你知道吗?在法国,以及许多其他采用类似标准的地区,这个默默无闻的“铁盒子”其实一直在实时…...

sd卡分区了数据还能恢复吗,只需3种方法和视频教学,数据就能神奇地回来!

断开读写通信!锁死底层端口!你的sd卡在经历重新分区的一瞬间,其物理层面的扇区正在承受最严酷的逻辑改写。这并非介质烧毁,而是系统内核强行切断了旧有簇链的映射关系,将其标定为休克态。此时若任由操作系统自动加载缩…...

失传34年的南极DOS游戏LAN - LOK重见天日,背后藏着怎样的历史?

LAN - LOK:失传34年的南极DOS破坏游戏这是一次对历史进行重构(或许还会进行现代化改造)的尝试。AlphaPixel常处理遗留代码库,接触到80年代和90年代用各种方言和语言编写、存储在难处理容器和介质中的代码。因保密协议,…...

[特殊字符] 高效统计排序数组中目标元素的出现次数

给定一个已排序的数组和一个目标值,如何快速统计该目标值在数组中出现的次数?这是面试中非常经典的一道题,今天就来聊聊两种解法:线性搜索和二分搜索。 问题描述 假设有一个已排序的数组 arr[] 和一个整数 target,需…...

如何快速解锁加密音乐文件:3个简单步骤让音乐自由播放

如何快速解锁加密音乐文件:3个简单步骤让音乐自由播放 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https…...