2014-06-18 29 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包。