将java.util.Date转换为String

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

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

1328424 次浏览

看起来你正在寻找SimpleDateFormat

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

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

使用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

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

//Formats a date/time into a specific pattern
DateFormatUtils.format(yourDate, "yyyy-MM-dd HH: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;
}

为什么不用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
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
}

在普通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,后者是非线程安全

稍微重复,但只需要一个语句。 这在某些情况下可能很方便

最简单的使用方法如下:

currentISODate = new Date().parse("yyyy-MM-dd'T'HH:mm:ss", "2013-04-14T16:11:48.000");

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

输出:太阳4月14日16:11:48 est 2013

注:HH vs HH —HH表示24小时的时间格式 - hh表示12h时间格式

如果只需要从日期到时间,则可以使用String的特性。

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

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

让我们试试这个

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中转换日期为字符串

博士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转换为InstantInstant类表示UTC时间轴上的一个时刻,其分辨率为纳秒(最多九(9)位小数分数)。

转换到/从java。时间是由添加到旧类中的新方法执行的。

Instant instant = myUtilDate.toInstant();

你的java.util.Datejava.time.Instant都在UTC中。如果您希望将日期和时间视为UTC,那就这样吧。调用toString生成标准ISO 8601格式的String。

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上运行

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

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

2014-11-14 14:05:09

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

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

为了通过某些特定区域的的镜头来观察同一时刻,应用ZoneId来得到ZonedDateTime

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

zdt.toString (): 2014 - 11 - 14 - t14:05:09凌晨(美国/加拿大蒙特利尔)

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

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

要了解更多信息,请参见甲骨文教程。搜索Stack Overflow可以找到很多例子和解释。

大部分的java。时间功能向后移植到Java 6 &ThreeTen-Backport中的7,并在ThreeTenABP中进一步改编为安卓(参见如何使用)。

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

下面是使用new java8time 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) < / >

. href="https://stackoverflow.com/questions/25376242/java8-java-util-date-conversion-to-java-time-zoneddatetime">Java8 java.util.Date转换为java.time.ZonedDateTime . href="https://stackoverflow.com/questions/25376242/java8-java-util-date-conversion-to-java-time-zoneddatetime">Java8

Format Instant to String .

java 8 ZonedDateTime和OffsetDateTime的区别是什么?< / >

单镜头;)

获取日期

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

快乐编码:)

    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

单线选项

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

请注意,这是使用Calendar.classSimpleDateFormat,然后它不是 在Java8下使用它是合乎逻辑的
yourstringdate =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());
Date date = new Date();
String strDate = String.format("%tY-%<tm-%<td %<tH:%<tM:%<tS", date);