HarmonyOS 鸿蒙Next TextTime组件onTime(utc、elapsedTime)里面的2个参数结果不正确,比正确数据相差10倍

发布于 1周前 作者 wuwangju 来自 鸿蒙OS

HarmonyOS 鸿蒙Next TextTime组件onTime(utc、elapsedTime)里面的2个参数结果不正确,比正确数据相差10倍

如图,设置一个TextTime倒计时,startTime为点击开始时记录的时间戳,utc、elapsedTime为TextTime中onTime事件中的参数值。运行时发现倒计时为0后,结果如下图:

根据官方文档中对参数的解释:

onTimer

onTimer(event: (utc: number, elapsedTime: number) => void)

时间文本发生变化时触发。锁屏状态和应用后台状态下不会触发该事件。 设置高精度的format(SSS、SS)时,回调间隔可能会出现波动。

卡片能力:
从API version 10开始,该接口支持在ArkTS卡片中使用。

元服务API:
从API version 11开始,该接口支持在元服务中使用。

系统能力:
SystemCapability.ArkUI.ArkUI.Full

参数:

参数名 类型 必填 说明
utc number Linux时间戳,即自1970年1月1日起经过的时间,单位为设置格式的最小单位。
elapsedTime number 计时器经过的时间,单位为设置格式的最小单位。

存在如下问题:

  1. utc也是时间记录的时间戳,经过3秒后的时间戳比点击开始按钮的时间戳还小,时间倒退?
  2. elapsedTime是计时器经过的时间,3秒的计数器该数据应该为3000,但是结果是304?

对比发现,utc、elapsedTime的结果都比正确的结果相差了10倍,不知道是这个版本的问题还是什么原因。

版本号:

  • DevEco Studio NEXT Release
  • Build #DS-233.14475.28.36.503900
  • 构建版本:5.0.3.900, built on October 8, 2024
  • Windows 11.0

源代码如下:

@Entry
@Component
struct LightPage {
  msg:string='定时开关'
  @State lightFlag:boolean=false
  @State startTime:number=0 //点击开始的时间
  controller:TextTimerController=new TextTimerController()
  @State utc:number=0
  @State elapsedTime:number=0

  build() {
    Column() {
      Text(this.msg)
        .fontSize(48)
        .fontWeight(FontWeight.Bold)
        .margin({top:30})

      TextTimer({isCountDown:true,count:3000,controller:this.controller})
        .format("mm:ss.SS")
        .fontSize(24)
        .margin({top:20,bottom:30})
        .onTimer((utc:number,elapsedTime:number)=>{
          this.utc=utc
          this.elapsedTime=elapsedTime
        })
      Column({space:30}){
        Text('startTime='+this.startTime)
          .fontSize(20)
          .fontColor(Color.Red)
        Text('utc='+this.utc)
          .fontSize(20)
          .fontColor(Color.Green)
        Text('utc-startTime='+(this.utc-this.startTime))
          .fontSize(20)
          .fontColor(Color.Blue)
        Text('elapsedTime='+this.elapsedTime)
          .fontSize(20)
          .fontColor(Color.Brown)
      }
      .width('80%')
      .height('60%')

      Button('开始')
        .width('70%')
        .onClick(()=>{
          this.lightFlag=!this.lightFlag
          this.startTime=new Date().getTime()
          console.log('MyTag startTime=',this.startTime)
          if (this.lightFlag){
            this.controller.start()
          } else {
            this.controller.reset()
          }
        })
    }
    .height('100%')
    .width('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next TextTime组件onTime(utc、elapsedTime)里面的2个参数结果不正确,比正确数据相差10倍的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next TextTime组件onTime(utc、elapsedTime)里面的2个参数结果不正确,比正确数据相差10倍的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,针对Next TextTime组件的onTime(utc, elapsedTime)方法中的两个参数结果不正确,且比正确数据相差10倍的问题,这通常可能是由于时间单位处理不当或时间计算逻辑错误引起的。

  1. 检查时间单位:首先确认utcelapsedTime参数的时间单位是否与你的预期一致。在鸿蒙系统中,时间参数可能以不同的单位表示(如秒、毫秒等),确保你的代码逻辑中处理这些参数时使用了正确的单位。

  2. 审查时间计算逻辑:检查onTime方法内部的时间计算逻辑,看是否有将时间值错误地放大了10倍。例如,如果某处代码不当地将时间乘以了10,就会导致结果比预期大10倍。

  3. 对比文档和源码:参考鸿蒙系统的官方文档,核对Next TextTime组件的onTime方法参数说明,确保理解正确。同时,如果可能,查看组件的源码实现,以了解参数的实际处理过程。

  4. 更新和测试:确保你的鸿蒙系统环境是最新的,有时候系统更新会修复一些已知的bug。同时,在不同的设备或模拟器上测试,以排除特定环境的问题。

如果问题依旧没法解决请联系官网客服, 官网地址是 https://www.itying.com/category-93-b0.html

回到顶部