我想将java.util.Date
对象转换为String
Java。
格式为 2010-05-30 22:15:52
我想将java.util.Date
对象转换为String
Java。
格式为 2010-05-30 22:15:52
Answers:
转换日期为字符串使用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);
Calendar
而不是普通new Date()
?有区别吗?
MM/dd/yyyy
格式是愚蠢和破碎。不要使用它。始终使用dd/MM/yyyy
或yyyy-MM-dd
。
yyyy-MM-dd
在任何地方都可以,但是您能做什么?)。
Commons-lang DateFormatUtils充满了好东西(如果您的类路径中有Commons-lang)
//Formats a date/time into a specific pattern
DateFormatUtils.format(yourDate, "yyyy-MM-dd HH:mm:SS");
null
检查。
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.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():2020-05-01T21:25:35.957Z
要获取所需格式的字符串,请指定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的偏移量或时区信息的这种格式。创建有关该字符串的日期时间值含义的歧义。
还请注意数据丢失,因为在日期时间值的String表示中,任何小数秒都会被忽略(有效地被截断)。
要通过某个特定区域的挂钟时间的镜头看到同一时刻,请应用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项目建议迁移到java.time。
要了解更多信息,请参见 Oracle教程。并在Stack Overflow中搜索许多示例和说明。
大部分的java.time功能后移植到Java 6和7 ThreeTen,反向移植,并进一步用于安卓在ThreeTenABP(见如何使用?)。
该ThreeTen-额外项目与其他类扩展java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。
atOffset
的方法,Instant
在Java中8见的Javadoc类: Instant::atOffset
。在Java 8中,Instant.now().atOffset( ZoneOffset.UTC ).toString()
将运行like这样的调用。检查您的import
陈述。验证您的IDE /项目已设置为运行Java 8或更高版本,而不是运行Java的早期版本。请参见在IdeOne.com上实时运行的代码:ideone.com/2Vm2O5
普通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
它不是线程安全的,顺便说一句。
稍微重复一些,但只需要声明一下即可。在某些情况下,这可能很方便。
您为什么不使用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
DateTime
对象。new DateTime( currentDate , DateTimeZone.forID( "America/Montreal" ) )
看起来您在寻找SimpleDateFormat。
格式:yyyy-MM-dd kk:mm:ss
HH
(0-23)更常见。
单发;)
获取日期
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());
快乐的编码:)
java.util.Date
,java.util.Calendar
和java.text.SimpleDateFormat
现在的遗产,由取代java.time内置到Java 8的Java 9.请参见类由Oracle教程。
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日星期日
注意:HH vs hh-HH表示24h时间格式-hh表示12h时间格式
如果您只需要从日期开始的时间,则可以仅使用String功能。
Date test = new Date();
String dayString = test.toString();
String timeString = dayString.substring( 11 , 19 );
这将自动减少String的时间部分并将其保存在中timeString
。
以下是使用新的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)
尝试这个,
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中日期和时间格式的更多信息,请参见下面的链接
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;
}
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.class
和SimpleDateFormat
,因此在Java8下使用它并不合逻辑。
yourstringdate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());
java.util.Date
,java.util.Calendar
和java.text.SimpleDateFormat
现在的遗产,由取代java.time内置到Java 8和更高等级。请参见Oracle 教程。
2019-20-23 09:20:22
20个月?)(2)我看不到答案提供了其他答案未涵盖的任何内容。(3)请不要教年轻人使用已经过时且臭名昭著的SimpleDateFormat
课程。至少不是第一选择。也并非毫无保留。如今java.time
,现代Java日期和时间API及其在方面有了很多改进DateTimeFormatter
。