首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-04-24 16:06
  • 2189
  • 10547
blog.csdn.net

【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对象解析:

  private formatTimestamp(timestamp: number): string {
    // 创建一个 Date 对象,将时间戳转换为日期时间
    const date = new Date(timestamp);
    // 获取年份
    const year = date.getFullYear();
    // 获取月份,注意 getMonth() 返回的月份是从 0 开始的,所以要加 1
    const month = String(date.getMonth() + 1).padStart(2, '0');
    // 获取日期
    const day = String(date.getDate()).padStart(2, '0');
    // 获取小时
    const hours = String(date.getHours()).padStart(2, '0');
    // 获取分钟
    const minutes = String(date.getMinutes()).padStart(2, '0');
    // 获取秒数
    const seconds = String(date.getSeconds()).padStart(2, '0');

    // 按照 'YYYY-MM-DD HH:mm:ss' 的格式拼接时间字符串
    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

时间格式的拼接逻辑可以完全根据自己的需求进行修改。

方案二、国际化时间格式转化:

import { intl } from '@kit.LocalizationKit';

    // 使用系统当前locale创建DateTimeFormat对象
    let dateFormat = new intl.DateTimeFormat();
    let time = systemDateTime.getTime();
    const date = new Date(time);
    this.mTimeContent = " 当前时间: "  + dateFormat.format(date);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

如果除了转换时间戳格式以外,还需要国际化的适配,需要给DateTimeFormat初始化进行配置:

let date = new Date(2021, 11, 17, 3, 24, 0); // 时间日期为2021.12.17 03:24:00
// 使用 en-GB locale创建DateTimeFormat对象
let datefmt = new intl.DateTimeFormat("en-GB");
let formattedDate = datefmt.format(date); // formattedDate "17/12/2021"

// 使用 en-GB locale创建DateTimeFormat对象,dateStyle设置为full,timeStyle设置为medium
datefmt = new intl.DateTimeFormat("en-GB", { dateStyle: 'full', timeStyle: 'medium' });
formattedDate = datefmt.format(date); // formattedDate "Friday, 17 December 2021 at 03:24:00"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

三、DEMO示例:

import { systemDateTime } from '@kit.BasicServicesKit'
import { intl } from '@kit.LocalizationKit';


@Entry
@Component
struct 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 {
    // 创建一个 Date 对象,将时间戳转换为日期时间
    const date = new Date(timestamp);
    // 获取年份
    const year = date.getFullYear();
    // 获取月份,注意 getMonth() 返回的月份是从 0 开始的,所以要加 1
    const month = String(date.getMonth() + 1).padStart(2, '0');
    // 获取日期
    const day = String(date.getDate()).padStart(2, '0');
    // 获取小时
    const hours = String(date.getHours()).padStart(2, '0');
    // 获取分钟
    const minutes = String(date.getMinutes()).padStart(2, '0');
    // 获取秒数
    const seconds = String(date.getSeconds()).padStart(2, '0');

    // 按照 'YYYY-MM-DD HH:mm:ss' 的格式拼接时间字符串
    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
  }

  build() {
    Column() {
      Text(this.mTimeContent)
        .fontSize(52)
        .fontColor(Color.Black)
        .onClick(this.onChangeTimeFormat)
    }
    .height('100%')
    .width('100%')
    .justifyContent(FlexAlign.Center)
  }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
注:本文转载自blog.csdn.net的GeorgeGcs的文章"https://blog.csdn.net/u010949451/article/details/145498982"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

135
HarmonyOS
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top