【问题标题】:Using SimpleDateFormat as a String for filenames使用 SimpleDateFormat 作为文件名的字符串
【发布时间】:2014-06-18 08:28:57
【问题描述】:

我目前正在创建一个将数据保存到磁盘中的应用程序。我希望文件的文件名是当前日期。为此,我尝试使用 SimpleDateFormat,但我不知道如何将其转换为字符串。它的 toString() 方法没有被 Object 覆盖,因此我没有得到有效的结果。

这是代码:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
...
ImageIO.write(capture, "png", new File(sdf.toString() + ".png"));

如何将日期/时间格式表示为字符串?

完整代码:

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.imageio.ImageIO;

public class Screenshot {

    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

    public static void fullScreenshot() {
        Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());

        try {
            BufferedImage capture = new Robot().createScreenCapture(screenRect);
            ImageIO.write(capture, "png", new File(sdf.format(new Date()) + ".png"));
        } catch (IOException e) {
            System.err.println("Thrown exception at IO file save");
        } catch (AWTException e) {
            System.err.println("Insufficient permissions or explosion while screenshoting");
        }
    }
}

【问题讨论】:

    标签: java string date time


    【解决方案1】:

    您正在寻找sdf.format(new Date())DateFormat 未使用任何日期初始化,您必须将日期传递给其 format 方法(或将字符串传递给其 parse 方法)。

    【讨论】:

    • this 的输出确实是一个字符串,但是它将冒号 (:) 从格式转换为斜杠 (/)。我该如何防止呢?
    • @Aborted 你能提供你的代码吗?这可能不是由于DateFormat
    【解决方案2】:

    你应该这样做

    sdf.format( new Date() );
    

    这行得通!

    【讨论】:

    • 这会将冒号转换为斜杠。输出返回为 yyyy-MM-dd HH/mm/ss/SSS。任何想法为什么?
    • @Aborted 如果您使用的是 NTFS 文件系统(如 Windows),则文件名中不能有冒号,也许这就是原因(我可能错了)
    【解决方案3】:

    只在格式方法上传递日期

    sdf.format(new Date().getTime())
    

    【讨论】:

      【解决方案4】:

      你可以这样做:

      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
      sdf.format(new Date().getTime());
      

      String fName = String.valueOf(new Timestamp(new Date().getTime())); // it ll give you current timestamp
      
      ImageIO.write(capture, "png", new File(fName + ".png"));
      

      ImageIO.write(capture, "png", new File("Name" + fName + ".png"));
      

      在这两种情况下 Date() 来自 java.sql 包。

      【讨论】:

        猜你喜欢
        • 2015-01-12
        • 2016-08-17
        • 2022-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        相关资源
        最近更新 更多