【HarmonyOS NEXT】systemDateTime 时间戳转换为时间格式 Date,DateTimeFo ...

打印 上一主题 下一主题

主题 864|帖子 864|积分 2592

【HarmonyOS NEXT】systemDateTime 时间戳转换为时间格式 Date,DateTimeFormat

一、前言

在鸿蒙应用开发中,经常需要将时间戳转化为尺度时间格式。即:一串数字转化为年月日时分秒。
时间戳通常是一个长整型的数字,如 1630416000000,对于普通用户来说,这个数字没有实际的意义,他们难以从中获取到有用的时间信息。
而将其转换为常见的时间格式,如 2021 - 09 - 01 00:00:00,用户可以直观地了解到具体的日期和时间,极大地提拔了信息的可读性。
由于鸿蒙应用开发使用ArkTS包罗于TypeScript语言,所以我们可以通过传统的Date对象解析举行时间戳转化时间格式的处置惩罚。
不过在鸿蒙系统API中,提供了用于国际化时间格式转化的接口。该接口根据不同的语言,举行了时间格式显示的处置惩罚。例如中国人喜欢从左到右 2021 - 09 - 01 。外国人某些场景下,习惯于另外的展示效果:Friday, 17 December 2021 at 03:24:00
二、办理方案:

方案根据场景需求举行选择:
方案一,Date对象解析:
  1.   private formatTimestamp(timestamp: number): string {
  2.     // 创建一个 Date 对象,将时间戳转换为日期时间
  3.     const date = new Date(timestamp);
  4.     // 获取年份
  5.     const year = date.getFullYear();
  6.     // 获取月份,注意 getMonth() 返回的月份是从 0 开始的,所以要加 1
  7.     const month = String(date.getMonth() + 1).padStart(2, '0');
  8.     // 获取日期
  9.     const day = String(date.getDate()).padStart(2, '0');
  10.     // 获取小时
  11.     const hours = String(date.getHours()).padStart(2, '0');
  12.     // 获取分钟
  13.     const minutes = String(date.getMinutes()).padStart(2, '0');
  14.     // 获取秒数
  15.     const seconds = String(date.getSeconds()).padStart(2, '0');
  16.     // 按照 'YYYY-MM-DD HH:mm:ss' 的格式拼接时间字符串
  17.     return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  18.   }
复制代码
时间格式的拼接逻辑可以完全根据本身的需求举行修改。
方案二、国际化时间格式转化:
  1. import { intl } from '@kit.LocalizationKit';
  2.     // 使用系统当前locale创建DateTimeFormat对象
  3.     let dateFormat = new intl.DateTimeFormat();
  4.     let time = systemDateTime.getTime();
  5.     const date = new Date(time);
  6.     this.mTimeContent = " 当前时间: "  + dateFormat.format(date);
复制代码
如果除了转换时间戳格式以外,还需要国际化的适配,需要给DateTimeFormat初始化举行配置:
  1. let date = new Date(2021, 11, 17, 3, 24, 0); // 时间日期为2021.12.17 03:24:00
  2. // 使用 en-GB locale创建DateTimeFormat对象
  3. let datefmt = new intl.DateTimeFormat("en-GB");
  4. let formattedDate = datefmt.format(date); // formattedDate "17/12/2021"
  5. // 使用 en-GB locale创建DateTimeFormat对象,dateStyle设置为full,timeStyle设置为medium
  6. datefmt = new intl.DateTimeFormat("en-GB", { dateStyle: 'full', timeStyle: 'medium' });
  7. formattedDate = datefmt.format(date); // formattedDate "Friday, 17 December 2021 at 03:24:00"
复制代码
三、DEMO示例:

  1. import { systemDateTime } from '@kit.BasicServicesKit'import { intl } from '@kit.LocalizationKit';@Entry@Componentstruct TimeFormatTestPage {  @State mTimeContent: string = "";  private timeNum: number = 0;  aboutToAppear(): void {    // 获取当前系统时间戳    let time = systemDateTime.getTime();    this.timeNum = time;    this.mTimeContent = " 当前时间戳: " + time;  }  onChangeTimeFormat = ()=>{    // 方案一,Date对象解析:    this.mTimeContent = " 当前时间: " + this.formatTimestamp(this.timeNum);    // 方案二、国际化时间格式转化:    // // 使用系统当前locale创建DateTimeFormat对象    // let dateFormat = new intl.DateTimeFormat();    // const date = new Date(this.timeNum);    // this.mTimeContent = " 当前时间: "  + dateFormat.format(date);  }  private formatTimestamp(timestamp: number): string {
  2.     // 创建一个 Date 对象,将时间戳转换为日期时间
  3.     const date = new Date(timestamp);
  4.     // 获取年份
  5.     const year = date.getFullYear();
  6.     // 获取月份,注意 getMonth() 返回的月份是从 0 开始的,所以要加 1
  7.     const month = String(date.getMonth() + 1).padStart(2, '0');
  8.     // 获取日期
  9.     const day = String(date.getDate()).padStart(2, '0');
  10.     // 获取小时
  11.     const hours = String(date.getHours()).padStart(2, '0');
  12.     // 获取分钟
  13.     const minutes = String(date.getMinutes()).padStart(2, '0');
  14.     // 获取秒数
  15.     const seconds = String(date.getSeconds()).padStart(2, '0');
  16.     // 按照 'YYYY-MM-DD HH:mm:ss' 的格式拼接时间字符串
  17.     return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  18.   }
  19.   build() {    Column() {      Text(this.mTimeContent)        .fontSize(52)        .fontColor(Color.Black)        .onClick(this.onChangeTimeFormat)    }    .height('100%')    .width('100%')    .justifyContent(FlexAlign.Center)  }}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

欢乐狗

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表