【问题标题】:Create file name using date and time使用日期和时间创建文件名
【发布时间】:2011-07-11 16:13:36
【问题描述】:

我希望你能帮助我,我正在尝试从另一个班级调用日期,看起来像“2011-03-09 06-57-40”,我想用它来创建下面的文件,但每次我在输出运行时会创建一个新文件,因为它会在重新运行时调用 dat()。我知道出了什么问题我只是不确定如何修复它,我想永久写入同一个文件。我希望这是有道理的? :/

提前感谢您的帮助:)

    date d = new date();
    String  cdate = d.date();


    String f = h;

    try{
        PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(cdate + ".tsv", true)));
        out.print(f);
        out.print("\t");
        out.close();
    }catch (IOException e){
    }

【问题讨论】:

  • 你能澄清一下你想对文件做什么吗?我有两个想法:存储您使用的日期/文件名。或者你可以只使用他的日期而不是时间,这可能足以用于日志文件或类似的东西。顺便说一句,这是java吗?也许也可以添加编程语言作为标签。
  • 嗨,对不起,我不是很清楚,这是使用 Java,我想创建一个名为今天日期和时间的文件,因此它始终是唯一的,然后我想将数据写入其中。这有帮助吗?非常感谢。
  • @James 不,它没有......你能详细说明这个问题吗?
  • 那么您是否希望 date 和 time 获得一个不存在的唯一文件?在您上面的问题中,您说您想继续写入同一个文件。我仍然不清楚你的目标是什么。我猜你只需要日期而不是时间?
  • 好的,抱歉,感谢您的帮助。我想创建一个名称为例如 2011-03-09 06-57-40.tsv 的文件名,问题是每次我从另一个类 date d = new date();字符串 cdate = d.date();再次调用并使用修改后的时间创建一个新文件,这种情况一遍又一遍地发生,所以你最终得到这样的文件 2011-03-09 06-57-40.tsv 2011-03-09 06-57- 41.tsv 2011-03-09 06-57-42.tsv

标签: java datetime filenames


【解决方案1】:
public class BELogs {

    private final static Logger logger = Logger.getLogger(BSELogs.class
            .getName()); 

             boolean makeDir = false;
             Date date = new Date();
             SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy") ;
             String curDate =dateFormat.format(date);
             FileHandler fh;     

               public BSELogs()  {

         try {  

             File file = new File("/home//Desktop/Logs "+curDate);
             makeDir = file.mkdir();
             fh = new FileHandler(file+"/MyLogFile.log "+curDate,true);  
             logger.addHandler(fh);
             // Set the logger level to produce logs at this level and above.
             logger.setLevel(Level.FINE);
             SimpleFormatter formatter = new SimpleFormatter();  
             fh.setFormatter(formatter);  

          } catch (SecurityException ex) {  **strong text**
             ex.printStackTrace();  
          } catch (IOException e) {  
               e.printStackTrace();  
           }  

    logger.info("Data Log Genrated............"); 

      }
}             

【讨论】:

    【解决方案2】:

    我会尽量回答。要以最可控的方式获取日期或时间字符串,请使用以下代码

    Calendar cal = Calendar.getInstance();
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    String dateStr = dateFormat.format(cal.getTime());
    

    查找 http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html 。它可能有助于理解。您还可以在格式化的字符串中添加小时/分钟或您需要的内容。

    另一个选项可能是始终将日历中的“较低”字段(如毫秒、秒、分钟)设置为零。

    cal.set(Calendar.MINUTE,0);
    

    如果您从其他班级检索您的日期并且无法直接创建日历,您也可以将日期放入日历中(注意:仅格式化您不需要日历)

    cal.setTime(date);
    

    也许这有助于更好地控制创建的文件名/文件。

    【讨论】:

      【解决方案3】:

      这可能要容易得多。只需一行代码就可以将文件名指定为日期和时间。

      String out = new SimpleDateFormat("yyyy-MM-dd hh-mm-ss'.tsv'").format(new Date());
      

      【讨论】:

        【解决方案4】:

        创建一个名为当前日期/时间的文件:

        Date date = new Date() ;
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss") ;
        File file = new File(dateFormat.format(date) + ".tsv") ;
        BufferedWriter out = new BufferedWriter(new FileWriter(file));
        out.write("Writing to file");
        out.close();
        

        【讨论】:

        • 你应该考虑的是,如果你在一个循环中写入多个文件,那么你可能会覆盖一些文件,因为时间是相等的。
        【解决方案5】:

        它会更高效一些 - 每个文件只有一个 SimpleDateFormat 和 Date 对象,并且没有字符串连接。

        private  final static String getDateTime()  
        {  
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd_hh:mm:ss");  
            df.setTimeZone(TimeZone.getTimeZone("PST"));  
            return df.format(new Date());  
        }  
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-25
          • 2014-08-13
          • 1970-01-01
          • 1970-01-01
          • 2015-11-17
          • 1970-01-01
          • 2015-07-16
          相关资源
          最近更新 更多