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