Преобразование java.утиль.Дата в строку
Я хочу, чтобы преобразовать java.util.Date
объект String
в Java.
формат 2010-05-30 22:15:52
16 ответов
в Java преобразуйте дату в строку, используя строку формата:
// Create an instance of SimpleDateFormat used for formatting
// the string representation of date (month/day/year)
DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
// Get the date today using Calendar object.
Date today = Calendar.getInstance().getTime();
// Using DateFormat format method we can create a string
// representation of a date with the defined format.
String reportDate = df.format(today);
// Print what date is today!
System.out.println("Report Date: " + reportDate);
Commons-lang DateFormatUtils полон вкусностей (если у вас есть commons-lang в вашем classpath)
//Formats a date/time into a specific pattern
DateFormatUtils.format(yourDate, "yyyy-MM-dd HH:mm:SS");
tl; dr
myUtilDate.toInstant() // Convert `java.util.Date` to `Instant`.
.atOffset( ZoneOffset.UTC ) // Transform `Instant` to `OffsetDateTime`.
.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) // Generate a String.
.replace( "T" , " " ) // Put a SPACE in the middle.
2014-11-14 14:05:09
java.время
современный способ - с java.классы времени, которые теперь вытесняют проблемные старые устаревшие классы даты-времени.
сначала конвертируйте свой java.util.Date
до Instant
. The Instant
класс представляет момент на временной шкале в UTC с разрешением наносекунд (до девяти (9) знаков после запятой фракция.)
преобразования в / из java.время выполняется новыми методами, добавленными к старым классам.
Instant instant = myUtilDate.toInstant();
обоих java.util.Date
и java.time.Instant
в UTC. Если вы хотите увидеть дату и время в формате UTC, пусть будет так. Звоните toString
для генерации строки в стандарте ISO 8601.
String output = instant.toString();
2014-11-14T14:05:09Z
для других форматов вам нужно преобразовать свой Instant
в более гибкий OffsetDateTime
.
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
файлы odt.toString (): 2014-11-14T14:05:09+00:00
чтобы получить строку в нужном формате, укажите DateTimeFormatter
. Можно указать пользовательский формат. Но я бы использовал один из предопределенных форматтеров (ISO_LOCAL_DATE_TIME
), и заменить T
в его выходе с пробелом.
String output = odt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.replace( "T" , " " );
2014-11-14 14:05:09
кстати, я не рекомендую такой формат, где вы намеренно теряете смещение от-UTC или информация о часовом поясе. Создает неоднозначность относительно значения значения даты-времени этой строки.
также остерегайтесь потери данных, так как любая дробная секунда игнорируется (фактически усекается) в представлении вашей строки значения даты и времени.
чтобы увидеть тот же самый момент через объектив какой-то конкретной регион времени применить ZoneId
и ZonedDateTime
.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
нмв.метод toString(): 2014-11-14T14:05:09-05:00[Америка/Монреале]
чтобы создать форматированную строку, сделайте то же самое, что и выше, но замените odt
С zdt
.
String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.replace( "T" , " " );
2014-11-14 14:05:09
при выполнении этого кода очень большое количество раз, вы можете быть немного более эффективным и избежать вызов String::replace
. Снижается, что также делает ваш код короче. Если это необходимо, укажите свой собственный шаблон форматирования в своем , теперь режим обслуживания, советует миграцию на java.время.
чтобы узнать больше, см. В Oracle Учебник. И search Stack Overflow для многих примеров и объяснений.
большая часть java.функциональность времени обратно портирована на Java 6 & 7 в ThreeTen-Backport и далее адаптировано к Android на ThreeTenABP (см. как использовать...).
на ThreeTen-Extra проект расширяет java.время с дополнительными занятиями. Этот проект является испытательной площадкой для возможных будущих дополнений к java.время.
Альтенативные однострочные в простой java:
String.format("The date: %tY-%tm-%td", date, date, date);
String.format("The date: %1$tY-%1$tm-%1$td", date);
String.format("Time with tz: %tY-%<tm-%<td %<tH:%<tM:%<tS.%<tL%<tz", date);
String.format("The date and time in ISO format: %tF %<tT", date);
использует форматер и относительный индексации вместо SimpleDateFormat
что это не потокобезопасна, кстати.
немного более повторяющийся, но нуждается только в одном утверждении. Это может быть удобно в некоторых случаях.
почему бы вам не использовать Joda (org.Джода.время.DateTime)? Это в основном однострочный.
Date currentDate = GregorianCalendar.getInstance().getTime();
String output = new DateTime( currentDate ).toString("yyyy-MM-dd HH:mm:ss");
// output: 2014-11-14 14:05:09
public static String formateDate(String dateString) {
Date date;
String formattedDate = "";
try {
date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss",Locale.getDefault()).parse(dateString);
formattedDate = new SimpleDateFormat("dd/MM/yyyy",Locale.getDefault()).format(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return formattedDate;
}
самый простой способ использовать его заключается в следующем:
currentISODate = new Date().parse("yyyy-MM-dd'T'HH:mm:ss", "2013-04-14T16:11:48.000");
где "гггг-мм-дд'Т'ХХ: мм: СС" - формат даты чтения
выход: ВС 14 апреля 16:11: 48 EEST 2013
Примечания: HH против hh - Чч-24-часовой формат времени - чч-время в формате 12ч
Если вам нужно только время от даты, вы можете просто использовать функцию String.
Date test = new Date();
String dayString = test.toString();
String timeString = dayString.substring( 11 , 19 );
это автоматически сократит временную часть строки и сохранит ее внутри timeString
.
вот примеры использования new Java 8 Time API в формате наследие java.util.Date
:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS Z")
.withZone(ZoneOffset.UTC);
String utcFormatted = formatter.format(date.toInstant());
ZonedDateTime utcDatetime = date.toInstant().atZone(ZoneOffset.UTC);
String utcFormatted2 = utcDatetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS Z"));
// gives the same as above
ZonedDateTime localDatetime = date.toInstant().atZone(ZoneId.systemDefault());
String localFormatted = localDatetime.format(DateTimeFormatter.ISO_ZONED_DATE_TIME);
// 2011-12-03T10:15:30+01:00[Europe/Paris]
String nowFormatted = LocalDateTime.now().toString(); // 2007-12-03T10:15:30.123
это приятно о DateTimeFormatter
что он может быть эффективно кэширован, поскольку он потокобезопасен (в отличие от SimpleDateFormat
).
список предопределенных fomatters и шаблон обозначения ссылки.
благодарности:
как анализировать / форматировать даты с LocalDateTime? (Java 8)
Java8 Ява.утиль.Преобразование даты в java.время.ZonedDateTime
попробуйте это,
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class Date
{
public static void main(String[] args)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = "2013-05-14 17:07:21";
try
{
java.util.Date dt = sdf.parse(strDate);
System.out.println(sdf.format(dt));
}
catch (ParseException pe)
{
pe.printStackTrace();
}
}
}
выход:
2013-05-14 17:07:21
для получения дополнительной информации о форматировании даты и времени в java см. ссылки ниже
В один выстрел ;)
чтобы получить дату
String date = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date());
чтобы получить время
String time = new SimpleDateFormat("hh:mm", Locale.getDefault()).format(new Date());
чтобы получить дату и время
String dateTime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.getDefaut()).format(new Date());
удачи в кодировании :)
public static void main(String[] args)
{
Date d = new Date();
SimpleDateFormat form = new SimpleDateFormat("dd-mm-yyyy hh:mm:ss");
System.out.println(form.format(d));
String str = form.format(d); // or if you want to save it in String str
System.out.println(str); // and print after that
}
попробуем
public static void main(String args[]) {
Calendar cal = GregorianCalendar.getInstance();
Date today = cal.getTime();
DateFormat df7 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
String str7 = df7.format(today);
System.out.println("String in yyyy-MM-dd format is: " + str7);
} catch (Exception ex) {
ex.printStackTrace();
}
}
или служебная функция
public String convertDateToString(Date date, String format) {
String dateStr = null;
DateFormat df = new SimpleDateFormat(format);
try {
dateStr = df.format(date);
} catch (Exception ex) {
ex.printStackTrace();
}
return dateStr;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = "2010-05-30 22:15:52";
java.util.Date formatedDate = sdf.parse(date); // returns a String when it is parsed
System.out.println(sdf.format(formatedDate)); // the use of format function returns a String