Как отформатировать метку времени 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);
ЧссПлы76
источник
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". 
user85421
источник
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самостоятельно.

Эриксон
источник
-9

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

1909 г.
источник