我想在Java中将java.util.Date
对象转换为String
。
格式为2010-05-30 22:15:52
答案 0 :(得分:729)
使用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 it!
System.out.println("Today is: " + todayAsString);
答案 1 :(得分:208)
Format formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = formatter.format(date);
答案 2 :(得分:60)
Commons-lang DateFormatUtils 充满了好东西(如果你的类路径中有公共语言)
//Formats a date/time into a specific pattern
DateFormatUtils.format(yourDate, "yyyy-MM-dd HH:mm:SS");
答案 3 :(得分:18)
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中时间轴上的一个时刻,分辨率为nanoseconds(小数部分最多九(9)位数字)。
来自/来自java.time的转换是通过添加到旧类的新方法来执行的。
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
),并用SPACE替换其输出中的T
。
String output = odt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.replace( "T" , " " );
2014-11-14 14:05:09
顺便说一下,我不建议您故意丢失offset-from-UTC或时区信息的这种格式。创建关于该字符串的日期时间值的含义的歧义。
还要注意数据丢失,因为在String的日期时间值表示中忽略(有效截断)任何小数秒。
要通过某个特定地区wall-clock time的镜头看同一时刻,请应用ZoneId
获取ZonedDateTime
。
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
zdt.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
。删除该调用也会缩短您的代码。如果需要,请在您自己的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 8及更高版本中。这些类取代了麻烦的旧日期时间类,例如java.util.Date
,.Calendar
和& java.text.SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。
大部分java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并进一步适应Android中的ThreeTenABP(见How to use…)。
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。
答案 4 :(得分:15)
普通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);
这使用Formatter和relative indexing代替SimpleDateFormat
not thread-safe,顺便说一句。
稍微多一点重复,但只需要一个陈述。 在某些情况下,这可能很方便。
答案 5 :(得分:9)
你为什么不使用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
答案 6 :(得分:7)
看起来您正在寻找SimpleDateFormat。
格式:yyyy-MM-dd kk:mm:ss
答案 7 :(得分:4)
如果您只需要该日期的时间,您可以使用String的功能。
timeString
这将自动剪切字符串的时间部分并将其保存在WHERE
。
答案 8 :(得分:4)
使用它的最简单方法如下:
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时间格式
答案 9 :(得分:4)
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;
}
答案 10 :(得分:3)
以下是使用新Java 8 Time API格式化legacy 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
不同)。
List of predefined fomatters and pattern notation reference
现金:
How to parse/format dates with LocalDateTime? (Java 8)
Java8 java.util.Date conversion to java.time.ZonedDateTime
What's the difference between java 8 ZonedDateTime and OffsetDateTime?
答案 11 :(得分:3)
单发;)
获取日期
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());
快乐编码:)
答案 12 :(得分:2)
试试这个,
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中日期和时间格式的更多信息,请参阅下面的链接
答案 13 :(得分:1)
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
}
答案 14 :(得分:1)
让我们试试这个
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;
}
答案 15 :(得分:1)
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
答案 16 :(得分:0)
OneLine选项
此选项可以轻松地一行写出实际日期。
请注意,这是使用
Calendar.class
和SimpleDateFormat
,而不是 在Java8下合理使用它。
yourstringdate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());
答案 17 :(得分:0)
Date date = new Date();
String strDate = String.format("%tY-%<tm-%<td %<tH:%<tM:%<tS", date);