【问题标题】:Error reading time stamp in a timer task在计时器任务中读取时间戳时出错
【发布时间】:2014-12-03 19:49:10
【问题描述】:

我正在从文件中读取时间戳数据,我希望稍后在Timer scheduler 中使用这些时间戳来根据时间戳触发一些事件。时间戳格式类似于0.012999999999,它们是字符串类型,我使用Long.parseLong 将其转换为long。我尝试了以下代码,但在运行时收到以下错误,在我看来这是关于时间戳的格式,但我不知道如何处理它。

代码

    static TimerTask timedTask = new TimerTask() {

    @Override
    public void run() {
        // TODO Auto-generated method stub

    }
};

Timer timer = new Timer();
    timer.schedule(timedTask, Long.parseLong(logfile.getFileHash().get(1).getTimeStamp()));

错误

Exception in thread "file processing" java.lang.NumberFormatException: For input string:   
"0.012999999999"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at com.example.File_IO_00.File_IO.processFile(File_IO.java:77)
at com.example.File_IO_00.File_IO.access$1(File_IO.java:69)
at com.example.File_IO_00.File_IO$1.run(File_IO.java:20)
at java.lang.Thread.run(Unknown Source)

【问题讨论】:

  • 时间戳格式来自哪里

标签: java timer timertask


【解决方案1】:

Long 是整数类型,即 0.012999999999 不是有效值。您应该改用Float.parseFloat()Double.parseDouble()

【讨论】:

  • 好的,但是现在,计时器任务将 Long 参数作为第二个参数?
  • 您可以使用 Math.round(Double.parseDouble(..)) 将其四舍五入为 Long 值。但是,这很可能不是您想要的,因为它会给您提供的字符串为 0。很可能,时间戳字符串以秒为单位,Timer 以毫秒为单位,因此您可以使用Math.round(1000 * Double.parseDouble(..)) 对其进行转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
相关资源
最近更新 更多