Як відформатувати часову позначку 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 = новий SimpleDateFormat ("MM / dd / yyyy HH: mm: ss") .формат (myTimestamp);
Ішан Ліянаж

27

Використовуйте String.format (або java.util.Formatter ):

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

РЕДАКТУЙТЕ:
перегляньте документацію Форматтера, щоб дізнатися, що означає TD та TT: натисніть на java.util.Formatter

Перший 'T' означає:

'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/30/17 00:39:18.
Номенон

@Noumenon дякую, що це був формат "мені подобається", як вимагало питання [:-)
user85421

10

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

Я настійно рекомендую подивитися на Джоду для чогось подібного. Чому? Це набагато багатша та інтуїтивніша бібліотека часу / дат для Java, ніж поточна бібліотека (і основа нової нової стандартної бібліотеки дат / часу Java, тому ви будете вивчати швидкий стандарт API).


8
Хороше попередження. Але дуже легко адресувати - не діліться екземплярами SimpleDateFormat, зберігаючи їх у змінній області / екземпляра сеансу / статичному контексті та надаючи доступ до них з декількох потоків. Просто створіть новий SimpleDateFormat () у вашому методі та відкиньте його після використання. Це безпечно для ниток.
Глен Кращий

Звичайно, якщо ви дійсно хочете зберігати / ділити екземпляр SimpleDateFormat, тоді синхронізуйте доступ: синхронізований (simpleDateFormatInstance) {s = simpleDateFormatInstance.format (myTimeStamp)} АБО створіть спеціальне розширення класу SDF і зробіть це автоматично у форматному методі.
Глен Кращий

9

Якщо ви використовуєте MySQL і хочете, щоб сама база даних здійснила перетворення, скористайтеся цим:

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

Якщо ви віддаєте перевагу форматування за допомогою Java, використовуйте це:

java.text.SimpleDateFormat

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

2

Використовуйте a DateFormat. У інтернаціоналізованому додатку використовуйте формат, наданий користувачем getInstance. Якщо ви хочете чітко контролювати формат, створіть новий SimpleDateFormat.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.