Как мне отформатировать временную метку java.sql по своему вкусу? (к строке для отображения)
Как отформатировать временную метку java.sql для отображения?
Ответы (7)
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);
Используйте 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".
05/30/17 00:39:18.
- person Noumenon; 30.05.2017
Для этого конкретного вопроса стандартное предложение java.text.SimpleDateFormat работает, но имеет неприятный побочный эффект, заключающийся в том, что SimpleDateFormat не является потокобезопасным и может быть источником особенно неприятных проблем, поскольку искажает выходные данные в многопоточных сценариях, и вы не будет никаких исключений!
Я бы настоятельно рекомендовал искать что-то подобное на Joda. Почему ? Это гораздо более богатая и интуитивно понятная библиотека времени/даты для Java, чем текущая библиотека (и основа многообещающей новой стандартной библиотеки даты/времени Java, так что вы скоро изучите стандартную библиотеку). API).
Если вы используете MySQL и хотите, чтобы сама база данных выполняла преобразование, используйте это:
Если вы предпочитаете форматировать с помощью Java, используйте это:
SimpleDateFormat dateFormat = new SimpleDateFormat("M/dd/yyyy");
dateFormat.format( new Date() );
Используйте DateFormat. В интернационализированном приложении используйте формат, предоставленный getInstance. Если вы хотите явно управлять форматом, создайте новый SimpleDateFormat самостоятельно.
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.
Строка timeFrSSHStr = timeFrSSH.toString();