Использование SimpleDateFormat в качестве строки для имен файлов

#java #string #date #time

#java #строка #Дата #время

Вопрос:

В настоящее время я создаю приложение, которое сохраняет данные на диск. Я хочу, чтобы имя файла файлов было текущей датой. Я пытался использовать 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");
        }
    }
}
  

Ответ №1:

Вы ищете sdf.format(new Date()) . A DateFormat не инициализируется какой-либо датой, вы должны передать дату в его format метод (или строку в его parse метод).

Комментарии:

1. Вывод этого действительно является строкой, но он преобразует двоеточия (:) в косые черты (/) из формата. Как мне это предотвратить?

2. @Прервано Не могли бы вы предоставить свой код? Вероятно, это не связано с DateFormat .

Ответ №2:

вы должны сделать

 sdf.format( new Date() );
  

Это сработает!

Комментарии:

1. Это преобразование двоеточий в косые черты. Выходные данные возвращаются как гггг-ММ-дд ЧЧ / мм / ss / SSS. Есть идеи, почему?

2. @Прервано Если вы используете файловую систему NTFS (например, Windows), у вас не может быть двоеточий в именах файлов, возможно, именно поэтому (я могу ошибаться)

Ответ №3:

передавайте только дату в методе format

 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 пакета.