Как отформатировать временную метку java.sql для отображения?

Как мне отформатировать временную метку java.sql по своему вкусу? (к строке для отображения)


person nos    schedule 20.07.2009    source источник


Ответы (7)


arrow_upward
169
arrow_downward

java.sql.Timestamp расширяет java.util.Date. Ты можешь сделать:

String s = new SimpleDateFormat("MM/dd/yyyy").format(myTimestamp);

Или также включить время:

String s = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(myTimestamp);
person ChssPly76    schedule 20.07.2009
comment
Это сработает, но будьте осторожны, так как SimpleDateFormat не является потокобезопасным. - person Brian Agnew; 21.07.2009
comment
Просто небольшое напоминание о том, что если объект SimpleDateFormat является объектом с локальной областью (он создается и используется только внутри метода), то он потокобезопасен, поскольку стек, в котором он будет находиться, по своей сути потокобезопасен (поскольку он принадлежит одна нить). - person quantum; 13.09.2011
comment
Чтобы включить время, вам нужно будет использовать SimpleDateFormat (MM/dd/yyyy hh:mm) или что-то подобное - person AverageMarcus; 26.07.2012
comment
чтобы сделать его полным для тех, кому это нужно, String S = new SimpleDateFormat(MM/dd/yyyy HH:mm:ss).format(myTimestamp); - person Ishan Liyanage; 03.10.2013

arrow_upward
28
arrow_downward

Используйте String.format (или java.util.Formatter):

Timestamp timestamp = ...
String.format("%1$TD %1$TT", timestamp)

EDIT:
см. документацию Formatter, чтобы узнать, что означают TD и TT: нажмите
java.util.Formatter

Первая буква «Т» означает:

't', 'T'    date/time   Prefix for date and time conversion characters.

и символ, следующий за этой буквой «Т»:

'T'     Time formatted for the 24-hour clock as "%tH:%tM:%tS".
'D'     Date formatted as "%tm/%td/%ty".
person user85421    schedule 21.07.2009
comment
Это лучший ответ, как по мне. Никакой лишний объект не создается только для преобразования временной метки в строку. - person Salil; 25.05.2013
comment
Теперь должно быть понятно, где найти документацию и что она означает - person user85421; 05.11.2013
comment
Очень элегантный. Просто для ясности: форматирование, созданное в этом примере, выглядит как 05/30/17 00:39:18. - person Noumenon; 30.05.2017
comment
@Noumenon спасибо, это был формат, который мне понравился, как того требовал вопрос [:-) - person user85421; 30.05.2017

arrow_upward
10
arrow_downward

Для этого конкретного вопроса стандартное предложение java.text.SimpleDateFormat работает, но имеет неприятный побочный эффект, заключающийся в том, что SimpleDateFormat не является потокобезопасным и может быть источником особенно неприятных проблем, поскольку искажает выходные данные в многопоточных сценариях, и вы не будет никаких исключений!

Я бы настоятельно рекомендовал искать что-то подобное на Joda. Почему ? Это гораздо более богатая и интуитивно понятная библиотека времени/даты для Java, чем текущая библиотека (и основа многообещающей новой стандартной библиотеки даты/времени Java, так что вы скоро изучите стандартную библиотеку). API).

person Brian Agnew    schedule 21.07.2009
comment
Хорошее предупреждение. Но очень легко решить - не делитесь экземплярами SimpleDateFormat, сохраняя их в области сеанса/переменных экземпляра/статическом контексте, а затем получая к ним доступ из нескольких потоков. Просто создайте новый SimpleDateFormat() в своем методе и выбросьте его после использования. Это потокобезопасно. - person Glen Best; 24.04.2013
comment
Конечно, если вы действительно хотите сохранить/поделиться экземпляром SimpleDateFormat, синхронизируйте доступ: synchronized(simpleDateFormatInstance) {s = simpleDateFormatInstance.format(myTimeStamp)} ИЛИ создайте пользовательское расширение класса SDF и сделайте это автоматически в методе форматирования. - person Glen Best; 24.04.2013

arrow_upward
9
arrow_downward

Если вы используете MySQL и хотите, чтобы сама база данных выполняла преобразование, используйте это:

DATE_FORMAT(дата,формат)< /а>

Если вы предпочитаете форматировать с помощью Java, используйте это:

java.text.SimpleDateFormat

SimpleDateFormat dateFormat = new SimpleDateFormat("M/dd/yyyy");
dateFormat.format( new Date() );
person DreadPirateShawn    schedule 20.07.2009

arrow_upward
2
arrow_downward

Используйте DateFormat. В интернационализированном приложении используйте формат, предоставленный getInstance. Если вы хотите явно управлять форматом, создайте новый SimpleDateFormat самостоятельно.

person erickson    schedule 20.07.2009

arrow_upward
0
arrow_downward

Java.время

Я даю современный ответ. Класс Timestamp представляет собой хак поверх уже плохо спроектированного класса java.util.Date и давно устарел. Однако я предполагаю, что вы получаете Timestamp из устаревшего API, который вы не можете позволить себе обновить до java.time прямо сейчас. Когда вы это сделаете, преобразуйте его в современный Instant и выполните дальнейшую обработку оттуда.

    DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM)
            .withLocale(Locale.GERMAN);

    Timestamp oldfashionedTimestamp = new Timestamp(1_567_890_123_456L);

    ZonedDateTime dateTime = oldfashionedTimestamp.toInstant()
            .atZone(ZoneId.systemDefault());
    String desiredFormat = dateTime.format(formatter);

    System.out.println(desiredFormat);

Вывод в моем часовом поясе:

07.09.2019 23:02:03

Выберите, насколько длинный или короткий формат вы хотите, указав FormatStyle.SHORT, .MEDIUM, .LONG или .FULL. Выберите свою собственную локаль, где я поставил Locale.GERMAN. И выберите нужный часовой пояс, например ZoneId.of("Europe/Oslo"). Timestamp — это момент времени без часового пояса, поэтому нам нужен часовой пояс, чтобы иметь возможность преобразовать его в год, месяц, день, час, минуту и ​​т. д. Если ваш Timestamp исходит из значения базы данных типа timestamp без часового пояса (обычно не рекомендуется, но, к сожалению, часто встречается), ZoneId.systemDefault(), скорее всего, даст вам правильный результат. Другой и немного более простой вариант в этом случае - вместо этого преобразовать в LocalDateTime, используя oldfashionedTimestamp.toLocalDateTime(), а затем отформатировать LocalDateTime так же, как я сделал с ZonedDateTime.

person Ole V.V.    schedule 09.09.2020

arrow_upward
-10
arrow_downward

Строка timeFrSSHStr = timeFrSSH.toString();

person 1909    schedule 15.08.2012