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


103

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

Ответы:


160

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

3
Это сработает, но будьте осторожны, поскольку SimpleDateFormat не является потокобезопасным.
Брайан Агнью,

17
Небольшое напоминание о том, что если объект SimpleDateFormat является объектом с локальной областью видимости (он создается и используется только внутри метода), то он является потокобезопасным, поскольку стек, в котором он будет находиться, по своей сути является «потокобезопасным» (поскольку он принадлежит одному потоку).
квант

5
Чтобы включить время, вам нужно будет использовать SimpleDateFormat ("MM / dd / yyyy hh: mm") или что-то подобное
AverageMarcus

1
чтобы сделать его полным для тех, кому это нужно, String S = new SimpleDateFormat ("MM / dd / yyyy HH: mm: ss"). format (myTimestamp);
Ishan Liyanage

27

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

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

РЕДАКТИРОВАТЬ:
см. Документацию Formatter, чтобы узнать, что означают TD и TT: щелкните java.util.Formatter

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

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

и символ, следующий за буквой "T":

'T'     Time formatted for the 24-hour clock as "%tH:%tM:%tS".
'D'     Date formatted as "%tm/%td/%ty". 

1
На мой взгляд, это лучший ответ. Никаких лишних объектов не создается только для преобразования метки времени в строку.
Салил

1
Теперь должно быть ясно, где найти документацию и что это означает
user85421 05

Очень элегантно. Чтобы быть ясным, форматирование, созданное в приведенном здесь примере, выглядит так 05/30/17 00:39:18.
Ноумен

@Noumenon, спасибо, это был формат "по моему вкусу", как требовал вопрос [:-)
user85421

10

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

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


8
Хорошее предупреждение. Но это очень легко решить - не делитесь экземплярами SimpleDateFormat, сохраняя их в области сеанса / переменных экземпляра / статическом контексте, а затем обращаясь к ним из нескольких потоков. Просто создайте новый SimpleDateFormat () в своем методе и удалите его после использования. Это потокобезопасный.
Glen Best

Конечно, если вы действительно хотите сохранить / поделиться экземпляром SimpleDateFormat, синхронизируйте доступ: synchronized (simpleDateFormatInstance) {s = simpleDateFormatInstance.format (myTimeStamp)} ИЛИ создайте собственное расширение класса SDF, и сделайте это автоматически в методе форматирования.
Glen Best

9

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

DATE_FORMAT (дата, формат)

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

java.text.SimpleDateFormat

SimpleDateFormat dateFormat = new SimpleDateFormat("M/dd/yyyy");
dateFormat.format( new Date() );

2

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.