我想在java中打印当前的日期和时间。这是我在java教程中尝试的代码:
import java.util.*;
public class Date {
public static void main(String args[]) {
// Instantiate a Date object
Date date = new Date();
// display time and date using toString()
System.out.println(date.toString());
}
}
编译好。但给出的输出是:
日期@ 15db9742
虽然我期待这样的输出:
Mon May 04 09:51:52 CDT 2009
代码有什么问题?
编辑: 我试图重命名该类..编辑代码:
import java.util.*;
public class DateDemo {
public static void main(String args[]) {
// Instantiate a Date object
Date d = new Date();
// display time and date using toString()
System.out.println(d.toString());
}
}
这是我编译代码并运行的方式:
sou @ sou-linux:〜/ Desktop / java $ javac DateDemo.java
sou @ sou-linux:〜/ Desktop / java $ java DateDemo
输出结果为:
日期@ 15db9742
答案 0 :(得分:15)
您的类是一个自定义类,它正在生成Object.toString
给出的输出。将该类重命名为Date
以外的其他内容,以便正确导入java.util.Date
答案 1 :(得分:9)
您从toString()
获得默认Object
,因为您创建了自己的名为Date
的类,该类隐藏了Date
中导入的java.util.
。您可以重命名您的课程,也可以使用规范名称java.util.Date
,如
public static void main(String args[]) {
java.util.Date date = new java.util.Date();
System.out.println(date);
}
这里的输出是
Mon Nov 03 10:57:45 EST 2014
答案 2 :(得分:6)
public static void main(String[] args) {
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//get current date time with Date()
Date date = new Date();
System.out.println(dateFormat.format(date));
//get current date time with Calendar()
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));
}
答案 3 :(得分:2)
import java.util.Date;
public class Dte {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date.toString());
}
}
将班级名称Date
更改为Dte
或某些内容,代码将正常运行。
输出为:Mon Nov 03 21:27:15 IST 2014
答案 4 :(得分:2)
您不应该使用toString()方法,因为:
类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”以及对象的哈希码的无符号十六进制表示组成。换句话说,此方法返回一个等于值的字符串:
getClass()。getName()+'@'+ Integer.toHexString(hashCode())
引自docs.oracle:http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html)。
Date类旨在像其他人一样使用。只是想解释/给你一个参考原因。
答案 5 :(得分:1)
将您的班级从日期重命名为其他内容..然后,以下工作正常:
import java.util.Date;
public class ImplClass
{
public static void main(String args[])
{
Date date = new Date();
// display time and date using toString()
System.out.println(date.toString());
}
}
输出采用所需格式
Mon Nov 03 09:49:57 CST 2014
答案 6 :(得分:1)
您的班级名称是日期,所以
Date date = new Date();
将创建班级的对象,当您拨打date.toString()
时,它将成为默认的Object.toString()
方法。
因此,如果您必须使用java.util.Date
课程,请将您的Date
课程重命名为其他内容
答案 7 :(得分:1)
您可以保持代码像::
一样简单import java.util.*;
public class Today{
public static void main(String args[]){
System.out.println("System Date :: ");
System.out.println(new Date());
}
}
除了将类名更改为今天或其他内容,而不是日期,因为它是关键字
答案 8 :(得分:1)
你可以试试这个,
import java.util.Date;
public class CurrentDate
{
public static void main(String[] args)
{
Date currentDate = new Date();
System.out.println("Curent Date and Time - " + currentDate.toString());
}
}
输出:
Mon May 04 09:51:52 CDT 2009
此外,您可以参考下面的日期和时间格式链接。非常有用。
https://docs.oracle.com/javase/tutorial/datetime/iso/datetime.html
https://docs.oracle.com/javase/7/docs/api/java/sql/Date.html
答案 9 :(得分:1)
已经指出了根本原因并在 accepted answer 中提出了解决方案。这个答案是向未来的访问者介绍现代 Date-Time API。
java.util
日期时间 API 及其格式化 API SimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到 modern Date-Time API*。
使用 java.time
(现代日期时间 API)的解决方案:
import java.time.Instant;
public class Main {
public static void main(String[] args) {
Instant instant = Instant.now();
System.out.println(instant);
}
}
样本运行的输出:
2021-07-03T14:08:02.594203Z
Instant
表示 UTC 中时间线上的一个瞬时点。输出中的 Z
是零时区偏移的 timezone designator。它代表祖鲁语并指定 Etc/UTC
时区(时区偏移为 +00:00
小时)。
注意:如果您有java.util.Date
的对象,您可以将其转换为Instant
,如下所示:
Date date = new Date(); // A sample date
Instant instant = date.toInstant();
使用 ZonedDateTime#now
或 ZonedDateTime#now(ZoneId)
显示特定时区的当前日期时间。
演示:
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
// The current date-time in the JVM's timezone
ZonedDateTime zdtDefaultTz = ZonedDateTime.now();
System.out.println(zdtDefaultTz);
// The current date-time in a specific timezone
ZonedDateTime zdtNewYork = ZonedDateTime.now(ZoneId.of("America/New_York"));
System.out.println(zdtNewYork);
}
}
样本运行的输出:
2021-07-03T15:19:48.007549+01:00[Europe/London]
2021-07-03T10:19:48.010048-04:00[America/New_York]
java.util.Date
或 Instant
的实例,如何在特定时区显示当前日期时间:将 Instant
转换为 ZonedDateTime
表示所需时区中的日期-时间,例如
ZonedDateTime zdt = instant.atZone(ZoneId.of("America/New_York"));
演示:
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
Instant instant = Instant.now(); // new Date().toInstant()
ZonedDateTime zdtDefaultTz = instant.atZone(ZoneId.systemDefault());
System.out.println(zdtDefaultTz);
ZonedDateTime zdtNewYork = instant.atZone(ZoneId.of("America/New_York"));
System.out.println(zdtNewYork);
ZonedDateTime zdtUtc = instant.atZone(ZoneId.of("Etc/UTC"));
System.out.println(zdtUtc);
}
}
输出:
2021-07-03T15:24:23.716050+01:00[Europe/London]
2021-07-03T10:24:23.716050-04:00[America/New_York]
2021-07-03T14:24:23.716050Z[Etc/UTC]
从 Trail: Date Time 了解有关现代 Date-Time API 的更多信息。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring 和 How to use ThreeTenABP in Android Project。