【发布时间】:2011-02-25 22:29:39
【问题描述】:
如何在Java中将当前日期转换为字符串?
【问题讨论】:
标签: java string date formatting
如何在Java中将当前日期转换为字符串?
【问题讨论】:
标签: java string date formatting
String date = new SimpleDateFormat("dd-MM-yyyy").format(new Date());
【讨论】:
// GET DATE & TIME IN ANY FORMAT
import java.util.Calendar;
import java.text.SimpleDateFormat;
public static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss";
public static String now() {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
return sdf.format(cal.getTime());
}
取自here
【讨论】:
Calendar 比 Date 更受欢迎?
// On the form: dow mon dd hh:mm:ss zzz yyyy
new Date().toString();
【讨论】:
使用DateFormat 实现;例如SimpleDateFormat.
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
String data = df.format(new Date());
【讨论】:
LocalDate.now()
.toString()
2017-01-23
最好明确指定所需/预期的时区。
LocalDate.now( ZoneId.of( "America/Montreal" ) )
.toString()
Java 8 及更高版本的现代方式是使用java.time 框架。
指定时区,因为世界各地的日期在任何给定时刻都会变化。
ZoneId zoneId = ZoneId.of( "America/Montreal" ) ; // Or ZoneOffset.UTC or ZoneId.systemDefault()
LocalDate today = LocalDate.now( zoneId ) ;
String output = today.toString() ;
2017-01-23
默认情况下,您会获得标准ISO 8601 格式的字符串。
对于其他格式,请使用 java.time.format.DateTimeFormatter 类。
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date、Calendar 和 SimpleDateFormat。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。
从哪里获得 java.time 类?
ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval、YearWeek、YearQuarter 和more。
【讨论】:
更快:
String date = FastDateFormat.getInstance("dd-MM-yyyy").format(System.currentTimeMillis( ));
【讨论】:
时间为 YYYY-MM-dd
String time = new DateTime( yourData ).toString("yyyy-MM-dd");
而DateTime的库是:
导入 org.joda.time.DateTime;
【讨论】:
DateTime 来自哪个库? Stack Overflow 上的答案应该有一些解释,因为这个网站不仅仅是一个 sn-p 库。
大多数答案是/是有效的。 用于日期处理的新 JAVA API 修改确保减少了 Java 日期处理中一些较早的歧义。
您将收到类似调用已弃用的消息。
new Date() // deprecated
上述调用让开发人员假设一个新的 Date 对象将为 Date 对象提供当前时间戳。这种行为在其他 Java API 类中并不一致。
执行此操作的新方法是使用 日历 实例。
new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()
这里的命名约定也不是完美的,但是很有条理。 对于像我这样难以抢劫但如果听起来/看起来合乎逻辑就永远不会忘记某事的人来说,这是一个好方法。
这更像是现实生活的代名词
另一种方法是使用 Joda time API
new DateTime().toString("yyyy-MM-dd")
还是很明显的
new DateTime(Calendar.getInstance().getTime()).toString("yyyy-MM-dd")
两者都将返回相同的结果。
【讨论】:
java.util.Date、java.util.Calendar 和 java.text.SimpleTextFormat 现在是 legacy,被 java.time 类取代。此外,Joda-Time 项目现在位于maintenance mode,团队建议迁移到 java.time。
Clock 实现与遗留类完全相同。只有在 Java 9 中才有了新的实现,能够以纳秒级的分辨率捕获当前时刻。
public static Date getDateByString(String dateTime) {
if(dateTime==null || dateTime.isEmpty()) {
return null;
}
else{
String modified = dateTime + ".000+0000";
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Date dateObj = new Date();
Date dateObj1 = new Date();
try {
if (dateTime != null) {
dateObj = formatter.parse(modified);
}
} catch (ParseException e) {
e.printStackTrace();
}
return dateObj;
}
}
【讨论】:
String 格式的日期传递给您的函数。