0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HarmonyOS实战:自定义时间选择器

尤枫 来源:jf_54996641 作者:jf_54996641 2025-06-09 15:51 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

最近在日常鸿蒙开发过程中,经常会使用一些时间选择器,鸿蒙官方提供的时间选择器满足不了需求,所以自己动手自定义一些经常会使用到的时间选择器,希望能帮到你,建议点赞收藏!

实现效果

需求分析

  1. 默认选中日期为当前时间。
  2. 支持精确到时分。
  3. 注意闰年的计算。

技术实现

  1. 首先要想实现时间选择器,需要使用一个上下可以滚动的控件,这里使用鸿蒙官方提供的 TextPicker,TextPicker 控件支持内容的上下滚动,可以用来显示年月日的选择器,确定了控件后,先计算日期。
new Promise< string[] >(async (resolve: (data: Array< string >) = > void, reject) = > {
      let list: Array< string > = []
      for (let start = this.currentYear; start <= this.currentYear + 1; start++) {
        //月份
        for (let i = (start == this.currentYear?this.startMonth:1); i < 13; i++) {
          let day: number = 0
          if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) {
            day = 31
          } else if (i == 2) {
            //闰年
            if (start % 400 == 0 || (start % 4 == 0 && start % 100 > 0)) {
              day = 29
            }
            // //平年
            else {
              day = 28
            }
          } else {
            day = 30
          }
          for (let j = ((start == this.currentYear&& i == this.startMonth)?this.startDay:1); j <= day; j++) {
            list.push(start + "-" + (i).toString().padStart(2,"0") + "-" + j.toString().padStart(2,"0"))
          }
        }
      }
      resolve(list)
    }).then((result: Array< string >) = > {
      this.timeList = result
    })

由于计算日期是比较耗时的操作,这里使用 Pormise 处理日期的计算,特别需要注意闰年的日期计算,这里以 1 年为周期。

  1. 根据计算得到的日期数据集合,使用 TextPicker 显示年月日,同时默认选中当前时间 choseDay。
TextPicker({ range: this.timeList, value: this.choseDay })
            .pickerStyle()
            .onChange((value, index) = > {
              this.choseDay = value.toString()
            })
            .width(105)
  1. 计算时分数据。
for (let i = 0; i < 60; i=i+this.skipMinute) {
      this.minuteList.push((i< 10?"0"+i:i).toString().concat(this.isShowUnit?"分":""))
    }
    for (let i = 0; i < 24; i++) {
      this.hourList.push((i< 10?"0"+i:i).toString().concat(this.isShowUnit?"时":""))
    }
  1. 分别使用 TextPicker 显示时分。
TextPicker({
        range: this.hourList,
        value:this.currentHour+""
      }).pickerStyle()
        .onChange((value,index)= >{
          this.selectHour = value+""
          this.onChange(this.selectHour.concat(":"+this.selectMinute))

        })
      TextPicker({
        range: this.minuteList,
        value:this.currentMinute+""
      }).pickerStyle()
        .onChange((value,index)= >{
          this.selectMinute = value.toString()
          this.onChange(this.selectHour+":"+value)
        })
  1. 要让时间选择器默认选择当前时间时,需要注意选择器的格式为"2012-01-01",需要在计算时不足 10 时补 0。否则时间选择器不会默认选中当前时间。
  2. 鸿蒙官方的 Date 类默认提供的月份是从 0 开始的,也就是说通过 data.getUTCMoth()获取的月份默认范围为 [0,11],而选择器需要显示的是 [1,12],这里需要手动处理。

总结

自定义时间选择器看似简单,其实需要注意的地方不少,时间的计算,时间的显示格式,默认选中当前时间等。都需要开发者在日常开发中注意计算细节。看到这里相信你已经学会了怎么自定义一个时间选择器了,快去动手试试吧!

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • HarmonyOS
    +关注

    关注

    80

    文章

    2157

    浏览量

    36479
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用Python/MyHDL创建自定义FPGA IP

    使用 Python/MyHDL 创建自定义 FPGA IP,与 Vivado 集成,并通过 PYNQ 进行控制——实现软件上的简单硬件设计。
    的头像 发表于 04-09 09:53 529次阅读
    使用Python/MyHDL创建<b class='flag-5'>自定义</b>FPGA IP

    MCUXpresso SDK创建自定义清单

    in the next step 创建自定义清单文件 - 在编辑(例如 VS Code)中打开文件。 - 复制west.yml文件。为副本指定一个相关
    发表于 04-07 07:11

    极海APM32F427如何实现自定义USB HID设备与PC进行通信

    最近需要使用到 APM32F427 枚举成Custom HID设备进行用户自定义通信,但是官方的例程只有提供的HID枚举为鼠标或者键盘类型的设备。这里记录一下,怎么使用Geehy官方的USB中间件,实现自定义的USB HID设备进行用户通信。
    的头像 发表于 03-30 09:30 2930次阅读
    极海APM32F427如何实现<b class='flag-5'>自定义</b>USB HID设备与PC进行通信

    电能质量监测装置可自定义监测时段吗?

    电能质量监测装置普遍支持自定义监测时段,现代中高端装置还具备分时差异化监测与灵活触发能力,可按时间、事件或混合策略定制采集与存储,兼顾精度、效率与存储成本。 一、自定义监测时段的核心实现方式 1.
    的头像 发表于 12-10 16:49 1219次阅读

    如何保证电能质量在线监测装置的自定义监测时段功能的准确性和稳定性?

    要保证电能质量在线监测装置 自定义监测时段功能 的准确性(时段执行精准、数据采集可靠)和稳定性(长期无故障、异常自动恢复),需从 时间基准、硬件保障、软件调度、配置校验、容错冗余、运维校准 六个维度
    的头像 发表于 12-10 14:03 581次阅读
    如何保证电能质量在线监测装置的<b class='flag-5'>自定义</b>监测时段功能的准确性和稳定性?

    电能质量在线监测装置的自定义监测时段功能有哪些应用场景?

    电能质量在线监测装置的 自定义监测时段功能 ,核心价值是通过 “按需配置监测时间、采样频率和数据策略”,实现精准监测、资源优化与数据针对性分析,其应用场景覆盖工业生产、商业运营、电网运维、特殊保障等
    的头像 发表于 12-10 14:01 610次阅读
    电能质量在线监测装置的<b class='flag-5'>自定义</b>监测时段功能有哪些应用场景?

    电能质量在线监测装置可自定义监测时段吗?

    存储策略及周期性重复规则,满足不同场景下的监测需求。 一、自定义监测时段的核心能力 能力类型 具体说明 典型应用 基础时段设置 设定单次监测的开始时间(精确到秒)、结束时间或持续时长 特定设备投运测试(如新增变频
    的头像 发表于 12-10 13:58 547次阅读
    电能质量在线监测装置可<b class='flag-5'>自定义</b>监测时段吗?

    无图形界面模式下自定义检查工具的应用

    此前文章已介绍 ANSA 中的自定义检查工具。本文将探讨该功能在无图形界面(No-GUI)模式下的应用,旨在满足标准化工作流程的需求,适用于需要高度自动化的前处理场景。通过集成自定义检查,用户可实现工作流程的高效自动化运行。
    的头像 发表于 11-30 14:13 867次阅读
    无图形界面模式下<b class='flag-5'>自定义</b>检查工具的应用

    采用汇编指示符来使用自定义指令

    、采用.insn汇编指示符实现risc-v自定义指令。这种方式可以指定工具来选择寄存,也可以自己选定寄存。指令格式如下(引自gnu 汇编
    发表于 10-28 06:02

    LOTO示波器自定义解码功能—CANFD解码

    LOTO示波器软件更新了自定义解码功能,并在bilibili上传了演示视频,视频链接: https://www.bilibili.com/video/BV1wq3ezjEjQ
    的头像 发表于 07-11 10:34 1288次阅读
    LOTO示波器<b class='flag-5'>自定义</b>解码功能—CANFD解码

    大彩讲堂:VisualTFT软件如何自定义圆形进度条

    VisualTFT软件如何自定义圆形进度条
    的头像 发表于 07-07 17:10 2092次阅读
    大彩讲堂:VisualTFT软件如何<b class='flag-5'>自定义</b>圆形进度条

    HarmonyOS实战:3秒实现一个自定义轮播图

    那么简单,需要考虑的细节很多。不过在 HarmonyOS 中实现一个轮播图却是十分的简单,本篇文章教你在最短的时间内快速实现一个自定义的 轮播图,建议点赞收藏!
    的头像 发表于 06-24 17:06 1672次阅读

    KiCad 中的自定义规则(KiCon 演讲)

    “  Seth Hillbrand 在 KiCon US 2025 上为大家介绍了 KiCad 的规则系统,并详细讲解了自定义规则的设计与实例。  ”   演讲主要围绕 加强 KiCad 中的自定义
    的头像 发表于 06-16 11:17 2767次阅读
    KiCad 中的<b class='flag-5'>自定义</b>规则(KiCon 演讲)

    HarmonyOS实战:高德地图自定义定位图标展示

    的问题,建议点赞收藏! 实现效果 需求分析 首先需要实现一个自定义的图标替代系统默认的箭头。 获取定位权限与位置信息。 获取定位结果并展示当前位置。 技术实现 在鸿蒙的实际开发过程中,地图定位权限首先需要申请两个权限,
    的头像 发表于 06-09 14:59 939次阅读
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>实战</b>:高德地图<b class='flag-5'>自定义</b>定位图标展示

    HarmonyOS应用自定义键盘解决方案

    自定义键盘是一种替换系统默认键盘的解决方案,可实现键盘个性化交互。允许用户结合业务需求与操作习惯,对按键布局进行可视化重构、设置多功能组合键位,使输入更加便捷和舒适。在安全防护层面,自定义键盘可以
    的头像 发表于 06-05 14:19 2773次阅读