Java - 24小时为每小时的每分钟生成一个时间戳

Dan*_*Dan 1 java datetime calendar

我正在编写一个程序,为每一小时的每一分钟生成一整天的时间戳.我使用Calendar类来获取时间戳,我必须使用它,所以没有必要建议其他方法.

我创建文件的想法是使用for循环24小时和嵌套for循环60分钟,其中时间戳将打印到.dat文件.我认为这会起作用,会打印一整天的数据然后停止.

但是我错了,完全错了!

结果是从现在起2年后每隔一分钟打印一次数据.

到目前为止,这是我的代码;

public static void main (String [] args) throws FileNotFoundException
{ 
    try
    {
        DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
        Date date = new Date();
        File fileName = new File(df.format(date) + ".dat");
        RandomAccessFile raf = new RandomAccessFile(fileName, "rw");

        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
        cal.add(Calendar.MILLISECOND, -cal.get(Calendar.MILLISECOND));
        cal.add(Calendar.SECOND, -cal.get(Calendar.SECOND));
        cal.add(Calendar.MINUTE, -cal.get(Calendar.MINUTE));
        cal.add(Calendar.HOUR_OF_DAY, -cal.get(Calendar.HOUR_OF_DAY));

        for(int hourInMinutes = 0; hourInMinutes < 1440; hourInMinutes++) //1440 is the total minutes in a day
        {   
            for(int minute = 0; minute <= hourInMinutes; minute++)
            {   
                    raf.writeLong(cal.getTimeInMillis());       //Timestamp
                    cal.add(Calendar.MINUTE, 1);
            }
        }
        raf.close();
    }
    catch(IOException iOE)
    {
        System.err.println(iOE);
    }
}
Run Code Online (Sandbox Code Playgroud)

数据从午夜(昨晚)开始,我希望它在同一天下午11点59分停止生成数据.

任何人都知道如何做到这一点?

aga*_*aga 5

您的for循环看起来不对,这是更新版本:

 for(int hourInDay = 0; hourInDay < 24; hourInDay++) 
    {   
        for(int minute = 0; minute <= 59; minute++)
        {   
            raf.writeLong(cal.getTimeInMillis());
            cal.add(Calendar.MINUTE, 1);                    
        }
    }
Run Code Online (Sandbox Code Playgroud)

或者你可以摆脱内部for循环(完全错误的第二个条件)并使用以下版本:

    for(int minutesInDay = 0; minutesInDay < 1440; minutesInDay++) //1440 is the total minutes in a day
    {   
        raf.writeLong(cal.getTimeInMillis());     
        cal.add(Calendar.MINUTE, 1);
    }
Run Code Online (Sandbox Code Playgroud)

并尝试为变量指定不同的名称.hourInMinutes听起来像"一分钟内的小时数".显然,这不是这个变量所代表的含义.