【问题标题】:Java: How to add seconds to Timestamp?Java:如何在时间戳中添加秒数?
【发布时间】:2011-11-07 10:23:04
【问题描述】:

我未能将秒数添加到 Java 时间戳。

我有这个,但是它给了我相同的日期:

int sec = 600;

java.sql.Timestamp ts_from_ws = new java.sql.Timestamp(retry_date);
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(ts_from_ws.getTime());
cal.add(Calendar.SECOND,sec);
java.sql.Timestamp ts_new_date_ws = new java.sql.Timestamp(cal.getTime().getTime());

【问题讨论】:

    标签: java timestamp


    【解决方案1】:

    你得到的代码对我有用。作为一个简短而完整的程序:

    import java.util.*;
    import java.sql.*;
    
    public class Test {
        public static void main(String[] args) {
            long retryDate = System.currentTimeMillis();
    
            int sec = 600;
    
            Timestamp original = new Timestamp(retryDate);
            Calendar cal = Calendar.getInstance();
            cal.setTimeInMillis(original.getTime());
            cal.add(Calendar.SECOND, sec);
            Timestamp later = new Timestamp(cal.getTime().getTime());
    
            System.out.println(original);
            System.out.println(later);
        }
    }
    

    输出:

    2011-11-07 10:27:45.302
    2011-11-07 10:37:45.302
    

    注意 10 分钟的差异,即 600 秒。

    当然,您会以这种方式失去亚毫秒级的精度,这可能并不理想 - 它与我通常首先使用时间戳的方式背道而驰 - 但它确实添加秒...

    另一种选择是直接使用Timestamp

    Timestamp original = ...;
    Timestamp later = new Timestamp(original.getTime() + (sec * 1000L));
    later.setNanos(original.getNanos());
    

    【讨论】:

    • @RamarajT:对getTime() 的两次调用非常刻意。 java.util.Calendar.getTime() 返回 java.util.Datejava.util.Date.getTime() 返回 long(自 Unix 纪元以来的毫秒数)。 Timestamp 构造函数参数是 long
    • 哦,好吧,我的坏。我没有调试它,但我记得 TimeStamp 类有一个以 Date 作为参数的构造函数,所以认为这可能是错字。但看起来我错了。
    【解决方案2】:

    我一直喜欢简洁:

    int sec = 600;
    
    Timestamp later = new Timestamp(retry_date.getTime() + sec * 1000);
    

    或者如果你想相对于“现在”:

    Timestamp later = new Timestamp(System.currentTimeMillis() + sec * 1000);
    

    【讨论】:

      【解决方案3】:
      public void addTimeBySecondsDemo(Date date,int sec){
          //int sec = 300;
          System.out.println("Given date:"+date);
          Calendar calender = Calendar.getInstance();
          calender.setTimeInMillis(date.getTime());
          calender.add(Calendar.SECOND, sec);
          Date changeDate=calender.getTime();
          System.out.println("changeDate ..:"+changeDate);                
      }
      

      【讨论】:

        【解决方案4】:

        java 8 中,您可以利用新的 java.time.Instant。在java.sql.TimeStamp 中,从java 1.8 添加了两个新方法:public static Timestamp from(Instant instant)public Instant toInstant()

        所以要添加 sec,我们可以将 TimeStamp 转换为 Instant,然后调用 plusSeconds,然后再返回 TimeStamp:

        Timestamp ts_from_ws = new Timestamp(retry_date);
        Instant next600Sec = ts_from_ws.toInstant().plusSeconds(600);
        Timestamp ts_new_date_ws = TimeStamp.from(next600Sec);
        

        或者一行:

        Timestamp ts_new_date_ws = TimeStamp.from(new Timestamp(retry_date).toInstant().plusSeconds(600))
        

        【讨论】:

          【解决方案5】:
          Timestamp.from(dto.getTimeModified().toInstant().plusSeconds(600))
          

          【讨论】:

          • 你能详细说明你的答案吗?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-04-29
          • 1970-01-01
          • 1970-01-01
          • 2015-08-13
          • 1970-01-01
          • 2019-10-18
          • 2021-12-12
          相关资源
          最近更新 更多