如何将几分钟添加到我已经拥有的时间戳中



我搜索了很多,但是我找到了一种从日历实例中添加或减去时间的方法。文件?

更新:我一直在使用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的中央类。Instantminus方法减去 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.Datejava.util.Calendarjava.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);
}

如果我误解了您的想法,请让我知道。

最新更新