2014-06-18 27 views
0

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

这是代码:

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"); 
     } 
    } 
} 

回答

1

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

+0

这是一个确实的字符串,但它是转换冒号(:)从格式中删去(/)。我如何防止这种情况发生? – Aborted

+0

@Aborted你能提供你的代码吗?这可能不是由于'DateFormat'。 – sp00m

+0

当然。我会在问题中正确回答。 – Aborted

1

你应该做的

sdf.format(new Date()); 

这将工作!

+0

这是将冒号转换为斜杠。输出回来为yyyy-MM-dd HH/mm/ss/SSS。任何想法为什么? – Aborted

+0

@Aborted如果你在一个NTFS文件系统(如Windows),你不能在文件名冒号,也许这就是为什么(我可能是错的) –

0

只能传递的日期格式方法

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

你可以这样做:

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包。