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

Posted

技术标签:

【中文标题】如何在java中将当前日期转换为字符串?【英文标题】:How to convert current date into string in java? 【发布时间】:2011-02-25 22:29:39 【问题描述】:

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

【问题讨论】:

【参考方案1】:
String date = new SimpleDateFormat("dd-MM-yyyy").format(new Date());

【讨论】:

结合了这个和下面的答案作为时间字符串。 C: @Ian Purton 是 UTC tz 中的字符串日期 ..? 仅供参考,这些麻烦的类现在是遗留的,被 java.time 类所取代。见Oracle Tutorial。【参考方案2】:
// 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

【讨论】:

使用日历代替日期的最佳响应。 我很困惑。在哪个宇宙中,CalendarDate 更受欢迎? 仅供参考,这些麻烦的类现在是遗留的,被 java.time 类所取代。见Oracle Tutorial。【参考方案3】:
// On the form: dow mon dd hh:mm:ss zzz yyyy
new Date().toString();

【讨论】:

很抱歉做得过火。 该方法使用的格式很糟糕。此外,您的 KVM 当前默认时区是隐式应用的,因此您的结果会有所不同。这些麻烦的类现在是遗留的,被 java.time 类所取代。见Oracle Tutorial。【参考方案4】:

使用DateFormat 实现;例如SimpleDateFormat.

DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
String data = df.format(new Date());

【讨论】:

仅供参考,这些麻烦的类现在是遗留的,被 java.time 类所取代。见Oracle Tutorial。【参考方案5】:

tl;博士

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 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。

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

从哪里获得 java.time 类?

Java SE 8Java SE 9Java SE 10 及更高版本 内置。 标准 Java API 的一部分,带有捆绑实现。 Java 9 添加了一些小功能和修复。 Java SE 6Java SE 7 大部分 java.time 功能都在ThreeTen-Backport 中向后移植到 Java 6 和 7。 Android 更高版本的 android 捆绑包实现 java.time 类。 对于早期的 Android (ThreeTenABP 项目适应 ThreeTen-Backport(如上所述)。见How to use ThreeTenABP…

ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuarter 和more。

【讨论】:

【参考方案6】:

更快:

String date = FastDateFormat.getInstance("dd-MM-yyyy").format(System.currentTimeMillis( ));

【讨论】:

需要 org.apache.commons【参考方案7】:

时间为 YYYY-MM-dd

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

而DateTime的库是:

导入 org.joda.time.DateTime;

【讨论】:

DateTime 来自哪个库? Stack Overflow 上的答案应该有一些解释,因为这个网站不仅仅是一个 sn-p 库。【参考方案8】:

大多数答案是/是有效的。 用于日期处理的新 JAVA API 修改确保减少了 Java 日期处理中一些较早的歧义。

您将收到类似调用已弃用的消息。

new Date() // deprecated

上述调用让开发人员假设一个新的 Date 对象将为 Date 对象提供当前时间戳。这种行为在其他 Java API 类中并不一致。

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

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

这里的命名约定也不是完美的,但是很有条理。 对于像我这样难以抢劫但如果听起来/看起来合乎逻辑就永远不会忘记某事的人来说,这是一个好方法。

这更像是现实生活的代名词

    我们得到一个 Calendar 对象并在其中查找时间。 (您一定想知道没有人从日历中获得时间,这就是我说它不完美的原因。但这是一个不同的话题 完全) 然后我们希望日期采用简单的文本格式,因此我们使用 SimpleDateFormat 实用程序类,它可以帮助我们格式化步骤 1 中的日期。我使用 yyyy、MM、dd 作为格式中的参数。 Supported date format parameters

另一种方法是使用 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 现在是 legacy,被 java.time 类取代。此外,Joda-Time 项目现在位于maintenance mode,团队建议迁移到 java.time。 @BasilBourque 这就是我在回答中的意思,投票最多的答案是正确的,但与当今的开发人员无关。最后,java 将有一个 Clock 类,并且 Clock.getTime() 将比 Date 或 DateTime 或 Time 类更明智和模仿现实生活。 Java 开发人员需要知道 OOPS 是从模仿现实生活场景开始的。 仅供参考,Java 8 中的 Clock 实现与遗留类完全相同。只有在 Java 9 中才有了新的实现,能够以纳秒级的分辨率捕获当前时刻。 是的,这就是我写“终于”的原因 Java 将有一个 Clock 类,它将模仿现实生活中的场景(OOPS 概念)并显示/捕获(您更喜欢说的方式)当前时刻。【参考方案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 格式的日期传递给您的函数。

以上是关于如何在java中将当前日期转换为字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中将字符串日期转换为日期时间格式? [复制]

如何在c#中将字符串转换为日期[重复]

如何在python中将字符串转换为日期时间[重复]

java中如何将字符串转换成日期型

如何在 .Net / C# 中将日期转换为 HTTP 格式的日期

在java中将时间戳转换为日期并显示计数值[重复]