Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
日期构造函数java_Java_Date - Fatal编程技术网

日期构造函数java

日期构造函数java,java,date,Java,Date,您好,我正在尝试在我创建的一个类中获取java的当前日期,但一切都失败了。我在很多网站上看到过 例如 日期构造函数没有参数 e、 g.Date-Date=新日期() 现在在我的项目中,我试着像这样使用它,我得到了错误 构造函数日期()未定义 这怎么可能?到目前为止,我给你完整的代码 import java.sql.Date; import java.text.SimpleDateFormat; public class Utility { String title;

您好,我正在尝试在我创建的一个类中获取java的当前日期,但一切都失败了。我在很多网站上看到过 例如 日期构造函数没有参数 e、 g.
Date-Date=新日期()

现在在我的项目中,我试着像这样使用它,我得到了错误

构造函数日期()未定义

这怎么可能?到目前为止,我给你完整的代码

import java.sql.Date;
import java.text.SimpleDateFormat;


public class Utility {


        String title;
        int ID;
        Date date;

        Utility(String t,int ID){
            this.ID=ID+1;
            title=t;
            SimpleDateFormat sdf = new SimpleDateFormat("dd/M/yyyy");
            Date a=new Date();// I get the error here
            String date = sdf.format(a);
            System.out.print(date);


        }
}

我在EclipseIDE工作。你能帮我吗?

你用错了
Date


看看你们的进口货。不要使用
java.sql.Date
而是使用
java.util.Date

您正在导入
java.sql.Date
使用
java.util.Date

您找到的示例是在使用时使用的

  • java.sql.Date

    有两个构造函数

    • 日期(长日期)
      :使用给定的毫秒时间值构造日期对象
    • 日期(整年、整月、整日)
      :不推荐使用的日期
    并且没有默认的
    Date()
    构造函数

  • java.util.Date

    其中包括一个没有参数的默认构造函数

    • Date()
      :分配日期对象并对其进行初始化,使其表示分配日期的时间,以最接近的毫秒为单位

在导入类时,Eclipse将帮助您定义可能的候选类,但始终检查第一个建议是否真的是您想要的。

您导入了错误的类。它是
java.util.Date
而不是
java.sql.Date

您还可以使用java.util.Calendar,如下所示:

Calendar c = Calendar.getInstance();
java.util.Date date = c.getTime();
tl;博士 获取今天的日期:

LocalDate.now()
以所需格式生成表示今天日期的文本:

LocalDate
.now()
.format(
    DateTimeFormatter.ofPattern( "d/M/uuuu" ) 
)
2019年1月23日

细节 答案是正确的。您将java.sql.Date类视为java.util.Date,这是在滥用它

但是建议使用java.util.Calendar问题的答案是错误的。java.util.Date和Calendar都是出了名的坏类,设计和实现都很差。它们被现代的java.time.*JSR310类所淘汰

此外,在使用日期时间时,您应该始终考虑时区。否则,您将获得默认时区,运行时的行为可能会发生变化

java.time 如果只需要日期值,而不需要一天中的时间和时区,请使用
LocalDate

LocalDate
该类表示一个只包含日期的值,不包含一天中的时间,也不包含或

时区对于确定日期至关重要。在任何一个特定的时刻,世界各地的日期都因地区而异。例如,中午夜后几分钟是新的一天,而中仍然是“昨天”

如果未指定时区,JVM将隐式应用其当前默认时区。该默认值可能在运行时(!)期间出现,因此您的结果可能会有所不同。最好将所需/预期时区明确指定为参数

大陆/地区
的格式指定,例如
美国/蒙特利尔
非洲/卡萨布兰卡
,或
太平洋/奥克兰
。切勿使用2-4个字母的缩写,如
EST
IST
,因为它们不是真正的时区,也不是标准化的,甚至不是唯一的(!)

如果要使用JVM的当前默认时区,请请求它并将其作为参数传递。如果省略,代码将变得模棱两可,我们无法确定您是否打算使用默认值,或者您是否像许多程序员一样不知道这个问题

ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.
或者指定一个日期。你可以用一个数字来设置月份,1-12月的数字为1-12

LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ;  // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.
或者,最好使用预定义的枚举对象,一年中每个月一个。提示:在整个代码库中使用这些
Month
对象,而不仅仅是一个整数,这样可以使代码更加自我记录,确保有效值,并提供更高的可用性。同上


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

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

从哪里获得java.time类

  • 、和更高版本-标准Java API的一部分,带有捆绑实现。
    • Java9添加了一些次要功能和修复
    • 大多数java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类

    • 对于早期的Android(使用java.util.Date代替java.sql.Date.FYI,像和
      java.text.SimpleDateFormat
      这样非常麻烦的旧日期时间类现在被java 8和更高版本中内置的类所取代。请看。别担心,这会发生在每个人身上。在我的IDE中,我通常会在java.util.Date之前得到java.sql.Date的建议;这样的情况就是这样经常为我使用:)不是“你也可以”,而是“你应该”!Calendar现在是一种方式,你得到了投票权。你是对的。它的大多数方法都被弃用了。但是一些框架仍然像java计时器一样使用它。@Lucas注意,表达式new Date()比Calendar.getInstance().getTime()性能好得多.Later意味着不必要的时区和字段初始化。而询问者只需要在SimpleDateFormat格式中设置历元时间,因此我不同意你的建议。谢谢。我测量了这两种格式的代码运行时间(使用System.nanoTime()而且使用日历的速度似乎慢了10倍。现代评论:更好的是,抛弃日期和刻度
      ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.
      
      LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ;  // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.
      
      LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;