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

147

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

9个回答

244
String date = new SimpleDateFormat("dd-MM-yyyy").format(new Date());

使用了这个方法和下面的答案中的方法,来处理时间字符串。C语言。 - php_coder_3809625
@Ian Purton 字符串日期是否在UTC时区..? - Kanagavelu Sugumar
1
这些麻烦的类现在已经过时,被java.time类所取代。请参阅Oracle教程 - Basil Bourque

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

以下内容摘自此处


使用日历而不是日期的最佳响应。 - Random
5
我感到困惑。在哪个宇宙中,“日历(Calendar)”比“日期(Date)”更加可取? - jasonmp85
1
这些麻烦的类现在已经过时,被java.time类所取代。请参阅Oracle教程 - Basil Bourque

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

58
很抱歉超额完成了。 - jasonmp85
2
该方法使用的格式太糟糕了。此外,你的KVM当前默认的时区是隐式应用的,因此你的结果会有所不同。这些麻烦的类现在已经过时,被java.time类取代。请参阅Oracle教程 - Basil Bourque

24

使用DateFormat实现;例如SimpleDateFormat

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

这些麻烦的类现在已经过时,被java.time类所取代。请参阅Oracle教程 - Basil Bourque

21

简而言之

LocalDate.now()
         .toString() 

2017年1月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年1月23日

默认情况下,您会得到一个标准的ISO 8601格式字符串。

要使用其他格式,请使用java.time.format.DateTimeFormatter类。


关于 java.time

java.time 框架是在 Java 8 及以上版本中内置的。这些类取代了麻烦的旧 legacy 日期时间类,如 java.util.DateCalendarSimpleDateFormat

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

了解更多信息,请查看Oracle教程。并搜索 Stack Overflow 获取许多示例和解释。规范是 JSR 310

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

如何获取 java.time 类?

这个ThreeTen-Extra项目扩展了java.time的额外类。该项目是java.time可能未来添加的潜在试验场。您可能会在这里找到一些有用的类,例如Interval, YearWeek, YearQuarter更多

9
更快速:
String date = FastDateFormat.getInstance("dd-MM-yyyy").format(System.currentTimeMillis( ));

4
需要 org.apache.commons 库。 - Josiah Yoder

1

时间格式为YYYY-MM-dd

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

日期时间库是:

import org.joda.time.DateTime;


“DateTime” 是哪个库中的?作为 Stack Overflow 上的回答,应该要有一些解释,因为这个网站的目的不仅仅是提供一些代码片段。 - Basil Bourque

1
大多数答案都是/曾经是有效的。 新的JAVA API修改了日期处理,确保了一些早期java日期处理中的歧义减少。
类似的调用将会得到一个弃用的消息。
new Date() // deprecated

上述调用让开发人员假设新的日期对象将给出带有当前时间戳的日期对象。然而,这种行为在其他Java API类中并不一致。
现在的做法是使用日历实例(Calendar Instance)。
new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()

在这里,命名规则并不完美,但这更有组织性。对于像我这样的人来说,如果某些东西听起来/看起来合乎逻辑,就不难记住,这是一种好方法。
这更类似于现实生活。
  1. 我们获取一个日历对象,并查找其中的时间。 (你可能会想,没有人从日历中获取时间,这就是为什么我说它不完美。但这是另一个话题)
  2. 然后我们想要将日期以简单的文本格式呈现,因此我们使用 SimpleDateFormat 实用程序类来帮助我们格式化步骤1中的日期。我已经使用 yyyy、MM 和 dd 作为格式参数。支持的日期格式参数
还有一种方法是使用 Joda 时间 API。
new DateTime().toString("yyyy-MM-dd")

或者更明显的是

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

两者将返回相同的结果。


FYI,诸如java.util.Datejava.util.Calendarjava.text.SimpleTextFormat等老旧的日期时间类现已成为遗留系统,被Java.time类所取代。此外,Joda-Time项目现已进入维护模式,该团队建议进行迁移至Java.time。 - Basil Bourque
1
@BasilBourque,这就是我在回答中所说的意思,即得票最高的答案是正确的,但不适用于现代开发人员。 最终,Java将拥有一个Clock类,Clock.getTime()比Date或DateTime或Time类更合理和更贴近实际生活。 Java开发人员需要知道OOPS始于模仿现实生活场景。 - Swapnil Vargaonkar
FYI,Java 8中的Clock实现与旧类完全相同。只有在Java 9中才会出现新的实现,能够以纳秒级的精度捕获当前时刻。 - Basil Bourque
是的,这就是我写“finally”的原因。Java将拥有一个Clock类,它将模拟现实生活场景(面向对象编程概念),并显示/捕获(您喜欢的说法)当前时刻。 - Swapnil Vargaonkar

-3
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”格式将日期传递给你的函数。 - Jerin Joseph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接