Как удалить миллисекунды из метки времени?

Мне задали этот вопрос:

Учитывая временную метку как длинное значение, напишите функцию утилиты в 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)); 
}
}

Но это не дало мне правильного результата

Ответ 1

Если я правильно вас понимаю, нет необходимости использовать Date/Calendar...

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

1274883865000

Или... если вы хотите иметь форматирование даты...

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

Ответ 2

Если бы такая же проблема имела мою первоначальную временную метку, сохраненную в sq и сделал sq.setTime(1000*(long)Math.floor(sq.getTime()/ 1000));, который выполняет эту работу. В моем случае sq является sql.Timestamp

Ответ 3

Ваш код содержит ошибки: вы не применили свои миллисекунды к c (Календарь). Исправление, чтобы остаться в пределах вашего кода:

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

} }