通过构造函数检索Date值并将其存储在Date类型的变量中

时间:2016-09-10 11:51:44

标签: java date

在将Date值作为字符串从用户获取后,尝试将String解析为Date时抛出异常。 为了存储Date值(或),应该做些什么来检索日期。

Medicine.java

package Medicine;
import java.util.Date;

public abstract class Medicine {

public int price;
    Date expiryDate;

    Medicine() {
    }

    Medicine(int price, Date expiryDate) {
    this.price=price;
    this.expiryDate=expiryDate;
    }

    public void getDetails() {
    System.out.println("The price is "+this.price);
    System.out.println("The expiry Date for the product is "+this.expiryDate);
    }

    abstract void displayLabel();

}

Tablet.java

package Medicine;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class Tablet extends Medicine{

Date expDate;
void displayLabel() {
    System.out.println("Store in a cool and dry place");
}

Tablet() {
}

Tablet(int price, Date expDate) {
    this.price=price;
    this.expDate=expDate;
}
}

执行类

int price;

Date expDate=new Date();;

Scanner reader = new Scanner(System.in);

Medicine[] medicineArray =new Medicine[5];

DateFormat df=new SimpleDateFormat("dd-mm-yyyy");

System.out.println("Enter Tablet's price");

price = reader.nextInt();

System.out.println("Enter Tablet's expiry date in yyyy-dd-mm format");

String stringExpDate=reader.nextLine();


try {
            expDate=df.parse(stringExpDate);

        }
        catch(Exception e){
            System.out.println("Date format not parsed");
        }
        Medicine med1=new Tablet(price,expDate);
        med1.getDetails();
        med1.displayLabel();

输出:

输入平板电脑的价格

23

以yyyy-dd-mm格式输入平板电脑的到期日期

未解析日期格式

价格是23

产品的到期日期为空

4 个答案:

答案 0 :(得分:1)

你的例子说

  

以yyyy-dd-mm格式输入平板电脑的到期日期

但您的格式为new SimpleDateFormat("dd-mm-yyyy");

首先确定哪一种是您真正想要的格式,然后将mm(分钟)更改为MM(月)。

您也不需要在Date expDate;课程中重新定义Tablet,因为Medicine已经expiryDate继承了Tablet。< / p>

答案 1 :(得分:0)

TL;博士

LocalDate.parse( "2016-01-23" )

java.time

Kayaman的回答是正确的。您的格式代码不正确。请务必仔细阅读文档。

此外,您正在使用现在由java.time类取代的旧的麻烦遗留日期类。其中包括LocalDate表示仅限日期的值,没有时间和没有时区。

您的输入字符串格式符合ISO 8601标准。因此无需指定格式化模式。

LocalDate ld = LocalDate.parse( "2016-01-23" );

答案 2 :(得分:-1)

你在平板电脑和医学课上都有一些问题。

从这里试试:

    abstract public class Medicine
{
    public int price;
    public Date expiryDate;

    Medicine(int price, Date expiryDate)
    {
        this.price=price;
        this.expiryDate=expiryDate;
    }

    public void getDetails() {
        System.out.println("The price is "+this.price);
        System.out.println("The expiry Date for the product is "+this.expiryDate);
    }

    abstract void displayLabel();
}

在这里

public class Tablet extends Medicine {

    Date expDate;

    void displayLabel() {
        System.out.println("Store in a cool and dry place");
    }

    public Tablet(int price, Date expDate)
    {
        super(price, expDate);
    }

}

下一部分应该很简单!

答案 3 :(得分:-1)

试试这个:

public class Tablet extends Medicine{

//Date expDate;
void displayLabel() {
    System.out.println("Store in a cool and dry place");
}

Tablet() {
}

Tablet(int price, Date expDate) {
    this.price=price;
    this.expiryDate=expDate;
}

}

int price;
        Date expDate=new Date();
        Scanner reader = new Scanner(System.in);
        Medicine[] medicineArray =new Medicine[5];
        DateFormat df=new SimpleDateFormat("yyyy-dd-mm");
        System.out.println("Enter Tablet's price");
        price = reader.nextInt();
        System.out.println("Enter Tablet's expiry date in yyyy-dd-mm format");
        String stringExpDate=reader.next();
        try { 
            expDate=df.parse(stringExpDate);
            }
        catch(Exception e)
        {
        System.out.println("Date format not parsed");
        }
    Medicine med1=new Tablet(price,expDate);
    med1.getDetails();
    med1.displayLabel();