将java.util.Date转换为String

Convert java.util.Date to String

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

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


使用DateFormat#format方法将Date转换为String:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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


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


Commons-lang DateFormatUtils充满了好东西(如果你的类路径中有公共语言)

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

TL;博士

1
2
3
4
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的转换是通过添加到旧类的新方法来执行的。

1
Instant instant = myUtilDate.toInstant();

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

1
String output = instant.toString();

2014-11-14T14:05:09Z

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

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

odt.toString(): 2014-11-14T14:05:09+00:00

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

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

2014-11-14 14:05:09

顺便说一句,我不推荐这种格式,你故意丢失从UTC或时区的偏移信息。创建关于该字符串的日期时间值的含义的歧义。

还要注意数据丢失,因为在String的日期时间值表示中忽略(有效截断)任何小数秒。

要通过某个特定区域的挂钟时间镜头看到相同的时刻,应用ZoneId来获得ZonedDateTime

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

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

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

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

2014-11-14 14:05:09

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

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

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

1
String output = zdt.format( f );

关于java.time

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

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

要了解更多信息,请参阅Oracle教程。并搜索Stack Overflow以获取许多示例和解释。

许多java.time功能都被反向移植到Java 6& 7在ThreeTen-Backport中,并在ThreeTenABP中进一步适应Android(请参阅如何使用...)。

ThreeTen-Extra项目使用其他类扩展了java.time。该项目是未来可能添加到java.time的试验场。


普通java中的单行代码:

1
2
3
4
5
6
7
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);

这使用Formatter和相对索引而不是SimpleDateFormat,这不是线程安全的,顺便说一句。

稍微多一点重复但只需要一个陈述。
在某些情况下这可能很方便。


你为什么不用Joda(org.joda.time.DateTime)?
它基本上是一个单行。

1
2
3
4
Date currentDate = GregorianCalendar.getInstance().getTime();
String output = new DateTime( currentDate ).toString("yyyy-MM-dd HH:mm:ss");

// output: 2014-11-14 14:05:09


看起来你正在寻找SimpleDateFormat。

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


单发;)

获取日期

1
String date = new SimpleDateFormat("yyyy-MM-dd",   Locale.getDefault()).format(new Date());

获得时间

1
String time = new SimpleDateFormat("hh:mm", Locale.getDefault()).format(new Date());

获取日期和时间

1
String dateTime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.getDefaut()).format(new Date());

快乐编码:)


1
2
3
4
5
6
7
8
9
10
11
12
13
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;
}

如果您只需要从该日期开始的时间,则可以使用String的功能。

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

这将自动剪切String的时间部分并将其保存在timeString中。


以下是使用新的Java 8 Time API格式化旧版java.util.Date的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
    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.util.Date转换为java.time.ZonedDateTime

格式化即时字符串

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


最简单的使用方法如下:

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

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

输出:Sun Apr 14 16:11:48 EEST 2013

注:HH vs hh
- HH指的是24小时时间格式
- hh指12h时间格式


试试这个,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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();
        }
    }
}

输出:

1
2013-05-14 17:07:21

有关java中日期和时间格式的更多信息,请参阅下面的链接

Oracle帮助中心

java中的日期时间示例


1
2
Date date = new Date();
String strDate = String.format("%tY-%<tm-%<td %<tH:%<tM:%<tS", date);

1
2
3
4
5
6
7
8
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
}

我们来试试吧

1
2
3
4
5
6
7
8
9
10
11
12
13
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();
    }
}

或者是效用函数

1
2
3
4
5
6
7
8
9
10
11
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中的转换日期到字符串


1
2
3
4
    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

OneLine选项

此选项可以轻松地单行写入实际日期。

Please, note that this is using Calendar.class and SimpleDateFormat, and then it's not
logical to use it under Java8.

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