How to remove milliseconds from a timestamp?

55,343

Solution 1

If I understand you correctly there is no need to use Date / Calendar...

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

1274883865000

Or... if you wish to have date formatting...

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

Solution 2

Had same issue had my initial timestamp stored in sq and did sq.setTime(1000*(long)Math.floor(sq.getTime()/ 1000)); that does the job. In my case sq is a sql.Timestamp

Solution 3

Your code was buggy: You didn't apply the yourmilliseconds to c(Calendar). The fix, to stay within the boundaries of your code:

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

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

     long yourmilliseconds = 1274883865399L;
     Calendar c = Calendar.getInstance();        
     c.setTimeInMillis(yourmilliseconds);
     c.set(Calendar.MILLISECOND, 0);

     Date resultdate = new Date(c.getTimeInMillis());
     SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy HH:mm");
     System.out.println(sdf.format(resultdate)); 
   }
}
Share:
55,343
Majid Kamal
Author by

Majid Kamal

Updated on July 05, 2022

Comments

  • Majid Kamal
    Majid Kamal almost 2 years

    I was asked this question :

    Given a timestamp as a long value, write a utility function in Java to drop the milliseconds. For example, given an input of 1274883865399 (actual time: 20100526T14:24:25.399Z), the function would return 1274883865000 (actual time: 2010-05-26T14:24:25.000Z)

    I did this :

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

    But it did not give me the right result

  • Majid Kamal
    Majid Kamal about 12 years
    Thanks, but I have to output it as : actual time: 2010-05-26T14:24:25.000Z
  • Adam
    Adam about 12 years
    I've updated my answer to include the correct data formatting
  • Majid Kamal
    Majid Kamal about 12 years
    Thank you very much, your helps are appreciated.