如何在Java中将当前日期转换为字符串?


Answers:



62
// 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());
}

这里取


使用日历而不是日期的最佳响应。
随机

5
我很困惑。在哪个宇宙中Calendar比这更可取Date
jasonmp85 2010年

1
仅供参考,这些麻烦的类现在已被遗留,由java.time类取代。请参见Oracle教程
罗勒·布尔克

27
// On the form: dow mon dd hh:mm:ss zzz yyyy
new Date().toString();

58
不好意思,我很抱歉。
jasonmp85

2
该方法使用的格式很糟糕。另外,您的KVM的当前默认时区是隐式应用的,因此您的结果将有所不同。这些麻烦的类现在已被遗留,由java.time类取代。请参见Oracle教程
罗勒·布尔克


13

tl; dr

LocalDate.now()
         .toString() 

2017-01-23

最好明确指定所需/预期的时区。

LocalDate.now( ZoneId.of( "America/Montreal" ) )
         .toString() 

java.time

从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.time框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.DateCalendar,和SimpleDateFormat

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

要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC驱动程序。不需要字符串,不需要类。java.sql.*

在哪里获取java.time类?

ThreeTen-额外项目与其他类扩展java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。你可能在这里找到一些有用的类,比如IntervalYearWeekYearQuarter,和更多



1

时间为YYYY-MM-dd

String time = new DateTime( yourData ).toString("yyyy-MM-dd");

而DateTime的库是:

导入org.joda.time.DateTime;


什么图书馆是DateTime从哪里来的?关于堆栈溢出的答案应该有一些解释,因为该站点不只是片段库。
罗勒·布尔克

0

大多数答案是有效的。对日期处理的新JAVA API修改可确保减少Java日期处理中的某些早期歧义。

对于类似的呼叫,您将收到不赞成使用的消息。

new Date() // deprecated

上面的调用使开发人员假定新的Date对象将为Date对象提供当前时间戳。此行为在其他Java API类之间不一致。

执行此操作的新方法是使用日历实例。

new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()

在这里,命名约定也不是完美的,但这是有组织的。对于像我这样的人来说,他们很难整理事物,但如果听起来/看起来合乎逻辑,则永远都不会忘记某些东西,这是一个好方法。

这更是现实生活的代名词

  1. 我们得到一个Calendar对象,并在其中寻找时间。(您一定想知道没有人会从日历中获得时间,这就是为什么我说它不完美的原因,但这完全是另一个话题)
  2. 然后,我们希望日期采用简单的文本格式,因此我们使用SimpleDateFormat实用程序类,该类有助于我们格式化第1步中的Date。支持的日期格式参数

另一种方法是使用Joda time API

new DateTime().toString("yyyy-MM-dd")

或明显的

new DateTime(Calendar.getInstance().getTime()).toString("yyyy-MM-dd")

两者将返回相同的结果。


仅供参考,麻烦的旧日期,时间类,如java.util.Datejava.util.Calendarjava.text.SimpleTextFormat现在的遗产,由取代java.time类。另外,Joda-Time项目现在处于维护模式,团队建议迁移到java.time。
罗勒·布尔克

1
@BasilBourque这就是我在答案中的意思,即投票最高的答案是正确的,但与当今的开发人员无关。最终,java将具有Clock类,而Clock.getTime()会比Date或DateTime或Time类更实际和真实地模仿。Java开发人员需要知道OOPS是从模仿现实生活场景开始的。
Swapnil Vargaonkar '17

仅供参考,ClockJava 8中的实现与旧类完全相同。只有在Java 9中,才能实现新的实现,该实现能够以高达10微秒的分辨率捕获当前时刻。
罗勒·布尔克

是的,这就是我写“最终” Java的原因,它将有一个Clock类,该类将模拟现实情况(OOPS概念)并显示/捕获当前时刻(您更喜欢这样说)。
Swapnil Vargaonkar '17

-2
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;
        }

    }

1
关于这段代码的一些解释可能是有益的。
Pyves

1
答案与问题无关。不,您不能将任何String格式的日期传递给函数。
杰林·约瑟夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.