如何使用Calendar对象在任何日期命名文件

时间:2013-12-13 15:40:58

标签: java date calendar

我正在编写代码来创建在日期日期标记的每日.idx和.dat文件,因此今天的文件将被称为13-12-2013.dat - DD-MM-YYYY格式

这是我所做的代码;

DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
Date date = new Date();
File fileNameDat = new File(df.format(date) + ".dat");
File fileNameIdx = new File(df.format(date) + ".idx");

这将打印出我希望的文件的正确名称

如果我想每天制作文件,这很好,我只是运行程序,它将为我创建具有正确标题的文件。但现在我必须在6个月前创建30天的文件,每个文件都有相同的名称布局。

我被建议使用日历类。我已经在使用日历类将时间设置为每天午夜以开始生成数据。

到目前为止我已尝试过这个;

File fileNameDat = new File(cal.getTime() + ".dat");
File fileNameIdx = new File(cal.getTime() + ".idx");

得到这个结果;

java.io.FileNotFoundException: Fri Dec 13 00:00:00 GMT 2013.dat (The filename, directory name, or volume label syntax is incorrect)

我是如何设置它以DD-MM-YYYY格式生成文件名的?

3 个答案:

答案 0 :(得分:2)

您隐式完成的是使用java.util.Date的toString()方法。为什么不喜欢你的第一种方法?

File fileNameDat = new File(df.format(cal.getTime()) + ".dat");
File fileNameIdx = new File(df.format(cal.getTime()) + ".idx");

答案 1 :(得分:1)

Joda-Time 2.3。

非常容易

我建议考虑YYYY-MM-DD格式,因为它按时间顺序按字母顺序排序。 Joda-Time包含内置的ISO 8601样式格式。此格式还使以后更容易解析。并消除了与月份相比的模糊性。

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;

DateTime start = new DateTime( 2013, 2, 1, 12, 15 ).withTimeAtStartOfDay();
for ( int nthDay = 0; nthDay < 30; nthDay++ ) {
    DateTime dateTime = start.plusDays( nthDay ).withTimeAtStartOfDay();
    String fileName = ISODateTimeFormat.date().print( dateTime ) + ".dat";
    //… create file in storage …
    System.out.println( "File # " + ( nthDay + 1 ) + ": " + fileName );
}

如果您真的想要问题中的格式......

DateTimeFormatter formatter = DateTimeFormat.forPattern( "dd-MM-YYYY");
DateTime start = new DateTime( 2013, 2, 1, 12, 15 ).withTimeAtStartOfDay();
for ( int nthDay = 0; nthDay < 30; nthDay++ ) {
    DateTime dateTime = start.plusDays( nthDay ).withTimeAtStartOfDay();
    String fileName = formatter.print( dateTime ) + ".dat";
    //… create file in storage …
    System.out.println( "File # " + ( nthDay + 1 ) + ": " + fileName );
}

跑步时......

File # 1: 01-02-2013.dat
File # 2: 02-02-2013.dat
File # 3: 03-02-2013.dat
File # 4: 04-02-2013.dat
File # 5: 05-02-2013.dat
File # 6: 06-02-2013.dat
File # 7: 07-02-2013.dat
File # 8: 08-02-2013.dat
File # 9: 09-02-2013.dat
File # 10: 10-02-2013.dat
File # 11: 11-02-2013.dat
File # 12: 12-02-2013.dat
File # 13: 13-02-2013.dat
File # 14: 14-02-2013.dat
File # 15: 15-02-2013.dat
File # 16: 16-02-2013.dat
File # 17: 17-02-2013.dat
File # 18: 18-02-2013.dat
File # 19: 19-02-2013.dat
File # 20: 20-02-2013.dat
File # 21: 21-02-2013.dat
File # 22: 22-02-2013.dat
File # 23: 23-02-2013.dat
File # 24: 24-02-2013.dat
File # 25: 25-02-2013.dat
File # 26: 26-02-2013.dat
File # 27: 27-02-2013.dat
File # 28: 28-02-2013.dat
File # 29: 01-03-2013.dat
File # 30: 02-03-2013.dat

答案 2 :(得分:-1)

例外可能是由于您没有初始化日历变量。

Calendar cal =Calendar.getInstance(Locale.getDefault());