我想将Java. util. date对象转换为Java中的字符串。

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


当前回答

单线选项

该选项通过简单的一行来编写实际的日期。

请注意,这是使用Calendar.class和SimpleDateFormat,然后它不是 在Java8下使用它是合乎逻辑的。

yourstringdate =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());

其他回答

使用DateFormat#format方法将日期转换为字符串:

String pattern = "MM/dd/yyyy HH:mm:ss";

// Create an instance of SimpleDateFormat used for formatting 
// the string representation of date according to the chosen pattern
DateFormat df = new SimpleDateFormat(pattern);

// Get the today date 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 todayAsString = df.format(today);

// Print the result!
System.out.println("Today is: " + todayAsString);

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

博士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.util.Date转换为Instant。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 - 14 - t14:05:09z

对于其他格式,需要将Instant转换为更灵活的OffsetDateTime。

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );

odt.toString (): 2020 - 05 - 01 - t21:25:35.957z

在IdeOne.com上可以看到代码的实时运行。

要获得所需格式的字符串,请指定DateTimeFormatter。您可以指定自定义格式。但是我将使用一个预定义的格式化器(ISO_LOCAL_DATE_TIME),并将其输出中的T替换为SPACE。

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

2014-11-14 14:05:09

顺便说一下,我不推荐这种故意丢失utc偏移量或时区信息的格式。对字符串的日期-时间值的含义产生歧义。

还要注意数据丢失,因为在date-time值的String表示中,任何小数秒都会被忽略(有效地截断)。

要通过某些特定地区的挂钟时间来观察同一时刻,可以应用ZoneId来获得zoneeddatetime。

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );

zdt toString():蒙特利尔2014-11-14T14:05:09-05:00[美国]

要生成一个格式化的String,执行与上面相同的操作,但将odt替换为zdt。

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。时间框架内置于Java 8及更高版本中。这些类取代了麻烦的旧日期-时间类,如java.util。Date, . calendar, & java.text.SimpleDateFormat。

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

要了解更多,请参阅Oracle教程。搜索Stack Overflow可以找到很多例子和解释。

大部分的java。时间功能在ThreeTen-Backport中向后移植到Java 6和7,并在ThreeTenABP中进一步适应Android(参见如何使用…)

ThreeTen-Extra项目扩展了java。额外的课程时间。这个项目是未来可能添加到java.time的一个试验场。

    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

下面是使用新的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)。

预定义格式符和模式符号引用的列表。

学分:

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

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

将即时格式化为字符串

java 8 ZonedDateTime和OffsetDateTime之间的区别是什么?

common -lang DateFormatUtils充满了好东西(如果你的类路径中有common -lang)

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