Как избавиться от миллисекунд объекта Date в Java формате
С java.util.Date
объект хранит дату как 2014-01-24 17:33:47.214
, но я хочу, чтобы формат даты, как 2014-01-24 17:33:47
. Я хочу удалить часть миллисекунд.
Я проверил вопрос, связанный с моим вопросом...
Как удалить sub секунд часть объекта даты
Я пробовал данный ответ
long time = date.getTime();
date.setTime((time / 1000) * 1000);
но у меня есть формат даты результата как 2014-01-24 17:33:47.0
. Как я могу удалить это 0
из моего формата даты???
7 ответов
основной ответ, вы не можете. Значение, возвращаемое Date#toString
представление Date
объект и он не несет никакой концепции формата, кроме того, что он использует внутренне для toString
метод.
вообще это не должно быть использовано для цели дисплея (за исключением редких случаев)
вместо этого вы должны использовать какой-то DateFormat
например...
Date date = new Date();
System.out.println(date);
System.out.println(DateFormat.getDateTimeInstance().format(date));
System.out.println(DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date));
System.out.println(DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM).format(date));
System.out.println(DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG).format(date));
выведет что-то как...
Thu Jan 30 16:29:31 EST 2014
30/01/2014 4:29:31 PM
30/01/14 4:29 PM
30/01/2014 4:29:31 PM
30 January 2014 4:29:31 PM
если вы действительно застряли, вы можете настроить его дальше с помощью SimpleDateFormat
, но я бы избегал этого, если вы можете, так как не все используют одно и то же форматирование даты/времени ;)
можно использовать SimpleDateFormatter
. Пожалуйста, см. следующий код.
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
Date now = date.getTime();
System.out.println(formatter.format(now));
tl; dr
отрубить долю секунды.
myJavaUtilDate.toInstant() // Convert from legacy class to modern class. Returns a `Instant` object.
.truncatedTo( ChronoUnit.SECONDS ) // Generate new `Instant` object based on the values of the original, but chopping off the fraction-of-second.
скрыть дробную секунду, при генерации String
.
myJavaUtilDate.toInstant() // Convert from legacy class to modern class. Returns a `Instant` object.
.atOffset( ZoneOffset.UTC ) // Return a `OffsetDateTime` object.
.format( DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ) ). // Ask the `OffsetDateTime` object to generate a `String` with text representing its value, in a format defined in the `DateTimeFormatter` object.
избегайте устаревших классов даты и времени
вы используете хлопотные старые классы даты-времени, теперь наследие, вытесненное java.классы время.
Instant
конвертировать ваши старые java.util.Date
объект java.time.Instant
путем вызова нового метода, добавленного к старому класс.
Instant instant = myJavaUtilDate.toInstant() ;
усечь
если вы хотите изменить значение самих данных, чтобы отбросить долю секунды, вы можете усечь. Ява.время использования классов неизменяемые объекты, поэтому мы генерируем новый объект, а не изменяем (мутируем) оригинал.
Instant instantTruncated = instant.truncatedTo( ChronoUnit.SECONDS );
генерировать строку
если вместо усечения вы просто хотите подавить отображение дробных секунд при создании строки, представляющей значение даты-времени, определите форматер в соответствии с вашими потребностями.
например, "uuuu-MM-dd HH:mm:ss" не упоминает дробную секунду, поэтому любые миллисекунды, содержащиеся в данных, просто не отображаются в сгенерированной строке.
преобразование Instant
до OffsetDateTime
для более гибкого форматирования.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" );
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC )
String output = odt.format( f );
часовой пояс
обратите внимание, что ваш вопрос игнорирует проблему часового пояса. Если вы намеревались использовать UTC, приведенный выше код работает как Date
и Instant
находятся в UTC по определению. Если вместо этого вы хотите воспринимать данные через объектив некоторого региона времени, применить часовой пояс. Поиск переполнения стека для ZoneId
и ZonedDateTime
имена классов для получения дополнительной информации.
о java.время
на java.время framework встроен в Java 8 и более поздние версии. Эти классы вытесняют беспокойных старых наследие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
на Joda Времени, теперь режим обслуживания, советует переход к java.время классы.
чтобы узнать больше, см. В Oracle Учебник. И search Stack Overflow для многих примеров и объяснений. Спецификация JSR 310.
вы можете обменять java.время объекты непосредственно с вашей базой данных. Используйте драйвер JDBC соответствуют JDBC 4.2 или позже. Нет необходимости в строках, нет необходимости в java.sql.*
классы.
где получить java.время занятий?
-
Java SE 8, Java SE 9, Java SE 10, и позже
- встроенный.
- часть стандартного API Java со встроенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
-
Java SE 6 и Java SE 7
- большая часть java.функциональность времени обратно портирована на Java 6 & 7 в ThreeTen-Backport.
-
Android
- более поздние версии Android bundle реализации java.время классы.
- для более раннего Android (ThreeTenABP проект приспосабливается ThreeTen-Backport (упомянутый выше.) См.как использовать ThreeTenABP....
на ThreeTen-Extra проект расширяет java.время с дополнительными занятиями. Этот проект является испытательной площадкой для возможных будущих дополнений к java.время. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и больше.
используйте DateUtils Apache:
import org.apache.commons.lang.time.DateUtils;
...
DateUtils.truncate(new Date(), Calendar.SECOND)
можно использовать SimpleDateFormat
класс для форматирования даты, как надо. Из-за разнообразия возможных комбинаций я просто включу ссылку на документацию здесь:
http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
ваш код будет выглядеть примерно так:
System.out.println(new SimpleDateFormat("MM/dd/yyyy").format(date));
просто для записи, принятый ответ, данный в сообщение, которое вы связали работает:
public static void main(String[] args) {
SimpleDateFormat df = new SimpleDateFormat("S");
Date d = new Date();
System.out.println(df.format(d));
Calendar c = Calendar.getInstance();
c.set(Calendar.MILLISECOND, 0);
d.setTime(c.getTimeInMillis());
System.out.println(df.format(d));
}
пожалуйста, попробуйте следующий формат даты:
import java.text.*;
SimpleDateFormat tmp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
System.out.println(tmp.format(date));