【问题标题】:print current date in java在java中打印当前日期
【发布时间】:2014-11-03 15:46:42
【问题描述】:

我想在 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

虽然我期待这样的输出:

2009 年 5 月 4 日星期一 09:51:52 CDT

代码有什么问题?

编辑: 我试图重命名该类.. 编辑后的代码:

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

【问题讨论】:

  • 你有哪个版本的java?
  • 重命名你的类,你现在正在实例化类本身
  • 删除您当前文件夹中的Date.javaDate.class!它们也在默认包中,因此您可以从旧的Date 获取它们。
  • @rick112358:您的类路径中的某处可能仍然有旧类 (Date.class) 的已编译字节码。简单地重命名源文件并再次编译不会删除之前编译的结果。
  • 删除 Date.class 解决了这个问题。谢谢

标签: java time


【解决方案1】:

您的类是一个自定义类,它产生Object.toString 给出的输出。将类重命名为 Date 以外的其他名称,以便正确导入 java.util.Date

【讨论】:

  • 在重命名类的同时,他还需要在重新编译新代码之前删除之前编写的 Date.java 和 Date.class 以使其按预期工作。
【解决方案2】:
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】:

    您从Object 获得默认的toString(),因为您创建了自己的名为Date 的类,它隐藏了从java.util. 导入的Date。您可以重命名您的课程,也可以使用规范名称 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
    

    【讨论】:

      【解决方案4】:

      已经指出了根本原因,并在accepted answer 中提出了解决方案。这个答案是为了向未来的访问者介绍现代的 Date-Time API。

      java.time

      java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用,改用modern Date-Time API*

      使用现代日期时间 API java.time 的解决方案:

      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
      

      ONLINE DEMO

      Instant 表示UTC 中时间轴上的一个瞬时点。输出中的Z 是零时区偏移的timezone designator。它代表 Zulu 并指定 Etc/UTC 时区(时区偏移量为 +00:00 小时)。

      注意:如果你有java.util.Date的对象,你可以将其转换为Instant,如下所示:

      Date date = new Date(); // A sample date
      Instant instant = date.toInstant();
      

      如何在特定时区显示当前日期时间:

      使用ZonedDateTime#nowZonedDateTime#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]
      

      ONLINE DEMO

      如果您有java.util.DateInstant 的实例,如何在特定时区显示当前日期时间:

      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]
      

      ONLINE DEMO

      通过 Trail: Date Time 了解有关现代日期时间 API 的更多信息。


      * 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7 . 如果您正在为一个 Android 项目工作,并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

      【讨论】:

        【解决方案5】:

        将您的课程从 Date 重命名为其他名称 .. 然后按预期工作:

        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】:
          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

          【讨论】:

            【解决方案7】:

            你不应该使用 toString() 方法,因为:

            Object 类的 toString 方法返回一个字符串,该字符串由对象作为实例的类的名称、符号字符“@”和对象哈希码的无符号十六进制表示形式组成。换句话说,这个方法返回一个字符串等于:

            getClass().getName() + '@' + Integer.toHexString(hashCode())

            引自 docs.oracle:http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html)。

            Date 类旨在像其他人回答的那样使用。只是想解释/给你一个参考原因。

            【讨论】:

            • java.util.Date 类重写 Object 类的 toString() 方法,以下列格式打印日期:dow mon dd hh:mm:ss zzz yyyy 'why?' 的真正原因是他的 Date 对象不是 java.util.Date 类而是他自己的 Date 类。
            【解决方案8】:

            你的班级名称是日期所以

            Date date = new Date();
            

            将创建您的类的对象,当您调用 date.toString() 时,它将是默认的 Object.toString() 方法。
            因此,如果您必须使用 java.util.Date 类,请将您的 Date 类重命名为其他名称

            【讨论】:

              【解决方案9】:

              你可以让代码像 ::

              一样简单
              import java.util.*;
              public class Today{
                public static void main(String args[]){
                  System.out.println("System Date :: ");
                  System.out.println(new Date());
                }
              }
              

              以及将类名更改为今天或其他名称,但不是日期,因为它是关键字

              【讨论】:

                【解决方案10】:

                你可以试试这个,

                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

                https://www.flowerbrackets.com/how-to-get-current-date-time-in-java/

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2013-06-07
                  • 2023-02-23
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-09-13
                  • 2011-09-23
                  • 1970-01-01
                  相关资源
                  最近更新 更多