時間戳校驗問題


  有一些需求需要設置某地址的訪問失效時間,例如生成地址之后30分鍾之內可以訪問,30分鍾之后就不允許訪問。此時需要在生成地址時加入當前時間戳,在用戶訪問該地址時獲取地址中的時間戳和系統當前的時間做比較,即可得出是否允許訪問的權限。

  例如:地址生成時加入時間戳字段time=20191127121314,用戶訪問時獲取到time字段的值,得到毫秒值,再加上30分鍾對應的毫秒值即:30*60*1000=1800000,得到該地址可以訪問的最大時間的毫秒值timeMax,然后再獲取系統當前的毫秒值timeNow和timeMax進行比較,若timeMax<timeNow則說明該地址已經失效。

  錯誤代碼:

1  String time = "20191127121314"; 
2 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
3  long millionSeconds = sdf.parse(time).getTime();//毫秒
4  long timeMax= millionSeconds + 1800000;
5  long timeNow = new Date().getTime(); 
6 if(timeMax< timeNow){ 
   System.out.println("timeMax======"+timeMax+";timeNow======="+timeNow+";校驗失敗,超時!"); 7 }

  以上代碼用了幾天沒有什么問題,但是偶爾有一次在中午12點多的時候生成地址去訪問發現超時了,看了系統時間和地址中的時間戳都沒有問題。自己在本地驗證了一下,20191127121314 對應的毫秒值是--1574784794000,而系統的當前毫秒值是:1574830678691,這兩個毫秒值之間相差了12個多小時,最后發現是時間格式的原因,yyyyMMddhhmmss中應該是HH,hh-12小時制(1-12),HH-24小時制(0-23),修改之后驗證沒有問題。

  正確代碼:

1 String time = "20191127121314"; 
2 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
3 long millionSeconds = sdf.parse(time).getTime();//毫秒
4 long timeMax= millionSeconds + 1800000;
5 long timeNow = new Date().getTime(); 
6 if(timeMax< timeNow){ 
7     System.out.println("timeMax======"+timeMax+";timeNow======="+timeNow+";校驗失敗,超時!"); 
8 }

 

(轉)Java 實例 - 時間戳轉換成時間

Java 實例 Java 實例

以下實例演示了如何使用 SimpleDateFormat 類的 format() 方法將時間戳轉換成時間。

日期和時間模式(注意大小寫,代表的含義是不同的):

  • yyyy:年
  • MM:月
  • dd:日
  • hh:1~12小時制(1-12)
  • HH:24小時制(0-23)
  • mm:分
  • ss:秒
  • S:毫秒
  • E:星期幾
  • D:一年中的第幾天
  • F:一月中的第幾個星期(會把這個月總共過的天數除以7)
  • w:一年中的第幾個星期
  • W:一月中的第幾星期(會根據實際情況來算)
  • a:上下午標識
  • k:和HH差不多,表示一天24小時制(1-24)
  • K:和hh差不多,表示一天12小時制(0-11)
  • z:表示時區

Main.java 文件

 1 import java.text.SimpleDateFormat;
 2 import java.util.Date;
 3  
 4 public class Main{
 5     public static void main(String[] args){
 6         Long timeStamp = System.currentTimeMillis();  //獲取當前時間戳
 7         SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 8         String sd = sdf.format(new Date(Long.parseLong(String.valueOf(timeStamp))));      // 時間戳轉換成時間
 9         System.out.println("格式化結果:" + sd);
10  
11         SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy 年 MM 月 dd 日 HH 時 mm 分 ss 秒");
12         String sd2 = sdf2.format(new Date(Long.parseLong(String.valueOf(timeStamp))));
13         System.out.println("格式化結果:" + sd2);
14    }
15 }

以上代碼運行輸出結果為:

格式化結果:2018-07-10 12:17:34 格式化結果:2018  07  10  12  17  34 

 

參考文檔:https://www.runoob.com/java/date-timestamp2date.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM