将java.util.Date转换为String

我想将java.util.Date对象转换为Java中的String

格式是2010-05-30 22:15:52

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

http://www.kodejava.org/examples/86.html

 Format formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String s = formatter.format(date); 

Commons-lang DateFormatUtils充满了好东西(如果你的classpath中有commons-lang)

 //Formats a date/time into a specific pattern DateFormatUtils.format(yourDate, "yyyy-MM-dd HH:mm:SS"); 

TL;博士

 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.time

现代的方法是使用java.time类来取代麻烦的旧的传统日期 – 时间类。

首先将您的java.util.Date转换为InstantInstant类表示UTC时间轴上的一个时刻,分辨率为纳秒 (最多九(9)位小数)。

来自java.time的转换是由添加到旧类中的新方法执行的。

 Instant instant = myUtilDate.toInstant(); 

你的java.util.Datejava.time.Instant都是UTC java.time.Instant 。 如果你想看到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 ),并用SPACE替换其输出中的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 ); 

zdt.toString():2014-11-14T14:05:09-05:00 [America / Montreal]

要生成格式化的字符串,请按照上述步骤操作,但用zdt替换odt

 String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) .replace( "T" , " " ); 

2014-11-14 14:05:09

如果执行此代码的次数很多,您可能希望效率更高一些,并避免调用String::replace 。 删除该调用也会缩短您的代码。 如果需要,可以在自己的DateTimeFormatter对象中指定自己的格式模式。 将此实例缓存为常量或成员以供重用。

 DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ); // Data-loss: Dropping any fractional second. 

通过传递实例来应用该格式化程序。

 String output = zdt.format( f ); 

关于java.time

java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧日期时间类,如java.util.Date.Calendarjava.text.SimpleDateFormat

Joda-Time项目现在处于维护模式 ,建议迁移到java.time。

要了解更多信息,请参阅Oracle教程 。 并搜索堆栈溢出了很多例子和解释。

大部分的java.time功能在ThreeTen-Backport中移植到Java 6&7中,并进一步适用于ThreeTenABP中的 Android (请参阅如何使用… )。

ThreeTen-Extra项目将java.time扩展到其他类。 这个项目是未来可能增加java.time的一个试验场。

你为什么不使用Joda(org.joda.time.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 

简单的老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: %1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS.%1$tL%1$tz", date); 

这使用格式化程序,而不是SimpleDateFormat ,这不是线程安全的,顺便说一句。

稍微重复一些,但只需要一个声明。 在某些情况下,这可能非常方便。

看起来你正在寻找SimpleDateFormat 。

格式:yyyy-MM-dd kk:mm:ss

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

其中“yyyy-MM-dd'T'HH:mm:ss”是阅读日期的格式

输出:2013年4月14日16:11:48 EEST 2013

注:HH vs hh – HH指24h时间格式 – hh指12h时间格式

如果您只需要从日期开始的时间,您可以使用字符串的功能。

 Date test = new Date(); String dayString = test.toString(); String timeString = dayString.substring( 11 , 19 ); 

这将自动剪切字符串的时间部分并将其保存在timeString

以下是使用新的Java 8时间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 )。

预定义的参数列表和模式表示法参考 。

积分:

如何使用LocalDateTime解析/格式化日期? (Java 8)

Java8 java.util.Date转换为java.time.ZonedDateTime

格式化即时到字符串

java 8 ZonedDateTime和OffsetDateTime有什么区别?

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

从Java转换日期到字符串

尝试这个,

 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中日期和时间格式的更多信息,请参阅下面的链接

Oracle帮助中心

java中的日期时间示例