【问题标题】:How to name a file any days date using Calendar object如何使用日历对象在任何日期命名文件
【发布时间】:2014-01-01 10:46:23
【问题描述】:

我正在编写代码来创建以日期日期标记的每日 .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 的文件名?

【问题讨论】:

  • FileNotFoundException 当具有指定路径名的文件不存在时抛出。我认为你也必须使用createNewFile() 方法。

标签: java date calendar


【解决方案1】:

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

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

【讨论】:

  • 我只是在看到你的回答之前才想到这一点,干杯
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-11-14
      • 1970-01-01
      • 2012-01-29
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2010-09-07
      • 1970-01-01
      相关资源
      最近更新 更多