首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在新Java对象中使用类型日期?

如何在新Java对象中使用类型日期?
EN

Stack Overflow用户
提问于 2018-04-23 19:32:33
回答 5查看 6.1K关注 0票数 1

我想知道如何在新对象中使用类型日期?

我将解释更多显示我的代码的内容:

我有一个Java类,名为:

Reiziger:

代码语言:javascript
复制
import java.util.Date;

public class Reiziger {
    private String naam;
    private Date gbdatum;

    public Reiziger(String nm, Date gbdtm) {
        this.naam = nm;
        this. gbdatum = gbdtm;
    }

    public String getNaam() {
        return naam;
    }

    public void setNaam(String naam) {
        this.naam = naam;
    }

    public Date getGBdatum() {
        return gbdatum;
    }

    public void setGBdatum(Date gbdatum) {
        this.gbdatum = gbdatum;
    }

    public String toString() {
        return naam + gbdatum;
    }
}

还有一个主要的:

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) {
        Reiziger r1 = new Reiziger("Joost", "01-01-1994");
        Reiziger r2 = new Reiziger("Hans", null);

        ReizigerOracleDaoImpl i1 = new ReizigerOracleDaoImpl();
        i1.alleReizigers.add(r1);
        i1.alleReizigers.add(r2);
        System.out.println(i1.alleReizigers);
    }
}

正如您在我的主题栏中所看到的,我尝试了很多只有null才能工作的东西。我想添加一个日期->的对象,例如: 01-01-1994,但是不能工作。

我试过没有“”也什么也没有。

知道我做错什么了吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-04-24 04:39:47

tl;dr

String对象传递给构造函数,但随后尝试将其分配给不同类型的成员变量(Date)。没办法。方钉圆孔。您必须首先将文本解析为正确类型的对象。

另一个问题是:您正在使用糟糕的旧日期时间类Date,您应该在那里使用现代的java.time.LocalDate类。

代码语言:javascript
复制
LocalDate.of( 1994 , Month.JANUARY , 1 )

java.time

我想知道如何在新对象中使用类型日期?

,不要,

显然,你想要的只是日期的值,所以使用日期类,而不是日期加时间的课程。

此外,从不使用这是几年前被java.time类取代的麻烦的旧日期时间类的一部分。

LocalDate类表示一个日期纯值,没有一天的时间,也没有时区.按1月至12月的数字1-12或按Month枚举类指定月份部分。

代码语言:javascript
复制
LocalDate ld = LocalDate.of( 1994 , Month.JANUARY , 1 ) ;

更改成员变量:

代码语言:javascript
复制
private Date gbdatum ;

…至:

代码语言:javascript
复制
private LocalDate gbdatum ;

将构造函数更改为:

代码语言:javascript
复制
public Reiziger(String nm, LocalDate gbdtm)

就这样说吧:

代码语言:javascript
复制
Reiziger r1 = new Reiziger( 
    "Joost" , 
    LocalDate.of( 1994 , Month.JANUARY , 1 ) 
) ;

关于java.time

http://docs.oracle.com/javase/10/docs/api/java/time/package-summary.html框架内置到Java8和更高版本中。这些类取代了麻烦的旧遗赠日期时间类,如java.util.DateCalendarSimpleDateFormat

http://www.joda.org/joda-time/项目现在在维护模式中,建议迁移到java.time类。

要了解更多信息,请参见http://docs.oracle.com/javase/tutorial/datetime/TOC.html。并搜索堆栈溢出以获得许多示例和解释。规范是JSR 310

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

在哪里获得java.time类?

  • Java 8Java 9Java 10,以及后来的
    • 内置的。
    • 带有捆绑实现的标准Java的一部分。
    • Java 9添加了一些次要的特性和修复。

三次-额外项目使用其他类扩展java.time。这个项目是将来可能加入java.time的试验场。您可以在这里找到一些有用的类,如IntervalYearWeekYearQuarter更多

票数 2
EN

Stack Overflow用户

发布于 2018-04-23 19:43:26

您的方法被定义为接受一个Date对象,但是您正在尝试传递一个字符串。Java不会自动将字符串转换为日期。

您需要做的是使用DateFormatter.

这将使用定义的日期模式将传入的字符串转换为要使用的日期对象。

在您的例子中,您可能希望执行类似的操作:

代码语言:javascript
复制
String dateFormat = "MM-dd-yyyy";

try {
    DateFormat df = new SimpleDateFormat(dateFormat);
    Date dateToUse = df.parse("01-01-1994");

    // Or this way
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat);
    LocalDate localDate = LocalDate.parse("01-01-1994", formatter);
} catch (ParseException pe) {
    // Do something
}

下面是指向Java的链接:

SimpleDateFormatter:https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html

DateTimeFormatter:https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

LocalDate:https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html

票数 2
EN

Stack Overflow用户

发布于 2018-04-23 19:38:10

https://docs.oracle.com/javase/7/docs/api/java/util/Date.html

Date(String)被否决了。在使用Date(Long)之后使用SimpleDateFormatter new SimpleDateFormatter ("dd-MM-yyyy") ;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49988644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档