2012-03-09 224 views
14

我被问到这个问题:如何从时间戳中删除毫秒?

给定一个时间戳记作为一个长整型值,在Java中写一个实用函数来减少毫秒。 例如,给定的1274883865399(实际时间:20100526T14:24:25.399Z)的输入,该 函数将返回1274883865000(实际时间:2010-05-26T14:24:25.000Z)

我这样做:

import java.text.*; 
import java.util.*; 

public class ClearMilliSeconds { 
    public static void main(String[] args) { 

     long yourmilliseconds = 1274883865399L; 
     SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy HH:mm"); 
     Calendar c = Calendar.getInstance(); 


     Date resultdate = new Date(yourmilliseconds); 
     c.set(Calendar.MILLISECOND, 0); 
     resultdate.setTime(c.getTimeInMillis()); 
     System.out.println(sdf.format(resultdate)); 
} 
} 

但它并没有给我正确的结果

+0

等待,但*为什么*是由'getTimeInMillis'返回的值**不受**'Calendar.set(...)'方法的影响? – Marco 2017-01-23 15:48:44

回答

26

如果我理解正确,你就没有必要使用日期/日历...

long yourmilliseconds = 1274883865399L; 
long droppedMillis = 1000 * (yourmilliseconds/ 1000);  
System.out.println(droppedMillis); 

或者......如果你想拥有的日期格式...

Calendar c = Calendar.getInstance(); 
c.setTime(new Date(yourmilliseconds)); 
c.set(Calendar.MILLISECOND, 0); 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm.ss.SSS'Z'"); 
sdf.setTimeZone(TimeZone.getTimeZone("GMT")); 
System.out.println(sdf.format(c.getTime())); 

2010-05-26T14:24.25.000Z

+0

谢谢,但我必须输出它为:实际时间:2010-05-26T14:24:25.000Z – 2012-03-09 17:42:35

+0

更改日期格式为yyyy-MM-dd'T'HH:mm.ss.SSS'Z' – Adam 2012-03-09 17:46:38

+0

I已更新我的答案,以包含正确的数据格式 – Adam 2012-03-09 17:49:38

1

曾有同样的问题,已经存储在平方我最初的时间戳 ,并做了sq.setTime(1000*(long)Math.floor(sq.getTime()/ 1000));这个工作。在我的情况sq是一个sql.Timestamp