我搜索了很多,但是我找到了一种从日历实例中添加或减去时间的方法。文件?
更新:我一直在使用Java1.4。这就是我找不到任何方法的原因。我将修改后的日期提取为字符串。我想将此字符串遵守我一个日历对象,以便我更容易将日历对象的add()应用于时间。我一直面临着同样的问题。这种方法正确吗?您能协助
nio和java.Time
Path filePath = Paths.get("myFile.txt");
Duration timeToSubtract = Duration.ofMinutes(7);
FileTime lastModified = Files.getLastModifiedTime(filePath);
Instant lastModifiedInstant = lastModified.toInstant();
Instant timeBeforeLastModified = lastModifiedInstant.minus(timeToSubtract);
System.out.println("Time after subtraction is " + timeBeforeLastModified);
刚刚在我的计算机上运行,我得到了此输出:
减法后的时间为2017-02-18T03:06:04Z
末尾的Z
表示UTC。Instant::toString
(将Instant
附加到字符串时隐式调用)总是在UTC中生成字符串。
我正在使用现代的Java Nio API和Java。时间,现代Java日期和时间API。NIO给我们一个FileTime
,在这种情况下,表示文件最后修改的时间。为了完成我们的时间数学,我首先将其转换为Instant
,这是Java.Time的中央类。Instant
的minus
方法减去 Duration
,一定的时间,并返回一个新的Instant
对象。
不要使用Calendar
。该课程设计不佳,并且长期过时。
链接: oracle教程:日期时间说明如何使用Java.Time。
如果您不需要使用日历,而是仅使用新的Java DateTime API,因为Java8 https://docs.oracle.com/javase.com/javase/8/docs/api/api/java/time/package-summary.html
在那里您有很好的便利方法,例如加/减等等。
例如,您可以简单地写
LocalTime now = LocalTime.now();
now.minusHours(2);
timestamp(作为long
)您可以在Calendar
实例中设置。之后,您可以add()
时间。
public void time() {
long timeStamp = 31415926535L;
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timeStamp);
// Substract 1 hour
calendar.add(Calendar.HOUR, -1);
// Add 20 minutes
calendar.add(Calendar.MINUTE, 20);
}
您可以使用Settime()这样:
yourtimestamp.settime(yourtimestamp.getTime() timeunit.minites.tomillis(minutestoadd));
由于Java 8,java.util.Date
,java.util.Calendar
和java.text.SimpleDateFormat
现在是遗产。因此,我编辑我的代码,删除旧类。
感谢@ole v.v.和@basil Bourque指向我的问题。
我对您的问题感到困惑。我想您想修改文件的最后修改时间。
所以我写下代码。
import java.io.File;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
public class Test {
private static final long ONE_SECOND = 1000L;
private static final long ONE_MINUTE = 60L * ONE_SECOND;
public static void main(String[] args) {
File file = new File("test.txt");
if (!file.exists()) {
System.err.println("File doesn't exist.");
return;
}
//get file's last modified, in millisecond
long timestamp = file.lastModified();
System.out.println("File's last modified in millisecond: " + timestamp);
//print time for human, convert to LocalDateTime
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.systemDefault());
System.out.println("File's last modified in LocalDateTime: " + localDateTime);
//add a minute
timestamp = timestamp + ONE_MINUTE;
//modify file's last modified
boolean isModified = file.setLastModified(timestamp);
if (isModified) {
System.out.println("Update file's last modified successfully.");
System.out.println("File's last modified in millisecond: " + file.lastModified());
//print time for human, convert to LocalDateTime
System.out.println("File's last modified in LocalDateTime: " +
LocalDateTime.ofInstant(Instant.ofEpochMilli(file.lastModified()), ZoneId.systemDefault()));
} else {
System.err.println("Update file's last modified failed.");
}
}
}
此外,如果要修改时间戳,只需使用/-操作。
您可以将时间戳转换为LocalDateTime,并使用LocalDateTime的API轻松修改时间。
public void modifyTime() {
//modify timestamp: add one second
long timestamp = System.currentTimeMillis();
timestamp = timestamp + 1000L;
//convert timestamp to LocalDateTime
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.systemDefault());
//modify LocalDateTime
//add a minute
localDateTime = localDateTime.plusMinutes(1);
//subtract a second
localDateTime = localDateTime.minusSeconds(1);
}
如果我误解了您的想法,请让我知道。