【问题标题】:How to print data every minute using the Unix epoch in Java如何使用 Java 中的 Unix 纪元每分钟打印一次数据
【发布时间】:2013-11-16 10:52:56
【问题描述】:

我正在编写将使用 RandomAccessFile 在 Java 中生成 .dat 文件的代码。

每个文件都创建一个小时,因此每分钟后都会添加新数据,一小时后会创建一个新文件。

例如 - 每个文件名的日期/时间格式为 DD-MM-YY-HH。所以现在是 05-11-13-14,下一个是 05-11-13-15,依此类推。

在文件中我收集了5条数据,第一条是一个长值,即当时的当前时间戳。

我需要的是获取时间戳以每分钟打印一次结果。

这是我到目前为止所做的;

public static void main (String [] args) throws FileNotFoundException
{ 
    try
    {
        DateFormat df = new SimpleDateFormat("dd-MM-yy-HH");
        Date date = new Date();
        System.out.println(df.format(date));

        File fileName = new File(df.format(date) + ".dat");
        RandomAccessFile raf = new RandomAccessFile(fileName, "rw");

        for(int i = 0; i < 5; i++)
        {   
            //1383580800000 4/11/2013 4pm
            raf.writeLong(Calendar.getInstance(TimeZone.getTimeZone("UTC")).getTimeInMillis());
            raf.writeInt(10);
            raf.writeInt(2);
            raf.write((byte)1);
            raf.writeInt(3);        
        }
        raf.close();
    }
    catch(IOException iOE)
    {
        System.err.println(iOE);
    }
}

【问题讨论】:

  • 不相关,但我会考虑像YY-MM-DD-HH这样的文件名
  • 看起来文件 IO 工作正常?你的问题是具体关于让它每分钟都发生吗?
  • 亨利不,我不能改变格式,它必须这样设置。 @Cruncher 是的,我正在寻找每分钟生成数据的代码
  • 你为什么使用RandomAccessFile?您只是创建一个新文件并生成内容或覆盖内容(如果存在)。这可以通过标准FileOutputStreamFileWriter 来完成。
  • @MadConan,有人告诉我使用 RandomAccessFile 并且必须使用它创建文件

标签: java calendar timestamp epoch


【解决方案1】:

为了简单地打印时间戳,您所要做的就是date.getTime();。如果您只想要 epoch 值,那么绝对没有理由触及任何日历或时区类。

如果您想安排每分钟运行一次,我会看看 ScheduledThreadPoolExecutor 类,或者只是 Timer

【讨论】:

  • 我基本上希望文件在 - 05-11-13-14-00 和每分钟 05-11-13-14-59 添加数据,然后为下一个小时。它必须实时完成
  • 但是您也想将实际时间戳写入文件对吧?无论哪种方式,您都可以使用我的答案中的信息来实现这一点。
【解决方案2】:

您可以为此使用TimerTimerTask

这将每 60 秒执行一次run 方法。

开始于:new ScheduleEveryMinute().start()

import java.util.Timer;
import java.util.TimerTask;

public class ScheduleEveryMinute
{
    Timer timer;

    public ScheduleEveryMinute()
    {
        timer = new Timer();
    }

    public void start()
    {
        timer.schedule(new ScheduleTask(), 60000, 60000);
    }

    class ScheduleTask extends TimerTask
    {
        public void run()
        {
             //code to schedule
        }
    }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-29
  • 2013-03-14
  • 2014-04-11
相关资源
最近更新 更多