【问题标题】:How to add minutes to a time stamp that I already have?如何将分钟添加到我已经拥有的时间戳?
【发布时间】:2019-03-11 11:05:00
【问题描述】:

我进行了很多搜索,但我找到了一种从给出当前时间的日历实例中添加或减去时间的方法。如何从给定文件的最后修改时间中减去时间?

更新: 我一直在使用Java1.4。这就是我找不到任何方法来做到这一点的原因。 我将修改后的日期提取为字符串。我想将此字符串转换为一个日历对象,以便我更容易将日历对象的 add() 应用于时间。我一直面临着同样的问题。这种方法正确吗?你能帮忙吗

【问题讨论】:

  • 1.得到那个时间 2. 减去要减去的时间
  • 能否详细说明
  • 我建议你不要使用Calendar。该课程设计不良且早已过时。而是使用例如ZonedDateTimeInstant,两者都来自java.time, the modern Java date and time API。前者有一个minusMinutes 方法,后者不会难很多。

标签: java timestamp last-modified minute


【解决方案1】:

如果您不必使用日历,则只需使用自 Java8 以来可用的新 Java DateTime API https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html

你有非常好的方便方法,比如加/减等。

例如你可以简单地写

  LocalTime now = LocalTime.now();
  now.minusHours(2);

【讨论】:

    【解决方案2】:

    时间戳(如long)您可以在Calendar 实例中设置。之后你可以add()time。

    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);
    }
    

    【讨论】:

      【解决方案3】:

      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 表示UTCInstant::toString(在将 Instant 附加到字符串时隐式调用)始终生成 UTC 字符串。

      我正在使用现代的 Java NIO APIjava.time,这是现代 Java 日期和时间 API。 NIO 给我们一个FileTime 在这种情况下表示文件最后修改的时间。为了进行时间数学,我首先将其转换为Instant,它是java.time 的中心类。 Instantminus 方法减去 Duration 一个时间量,并返回一个新的 Instant 对象。

      不要使用Calendar。那个类设计得很糟糕,而且已经过时了。

      链接: Oracle tutorial: Date Time 解释如何使用 java.time。

      【讨论】:

        【解决方案4】:

        你可以像这样使用 setTime():

        yourTimeStamp.setTime(yourTimeStamp.getTime() + TimeUnit.MINUTES.toMillis(minutesToAdd));

        【讨论】:

          【解决方案5】:

          从 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);
          }
          

          如果我误解了你的想法,请告诉我。

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-10-22
          • 2016-09-04
          • 2020-07-02
          • 1970-01-01
          • 2010-09-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多