Учитывая текстовый файл здесь:
Date Opening Closing
6-Mar-2012 500 1000
9-Jun-2011 110 970
7-Dec-2015 1090 980.69
28-Feb-2010 500 800
Мне нужно построить даты в GregorianCalendar и иметь конструкторы даты в String. В моем выводе дата отображается как NULL, есть идеи по исправлению?
Вывод:
The date is null, the opening is 500, and the closing is 800
Дата объявлена GregorianCalendar, однако конструкторы принимают дату в строке и должны ожидать форму «дд-ММ-гггг».
Класс Джиа:
public class Djia implements Comparable<Djia> {
// instance variables
private GregorianCalendar date;
private double opening;
private double closing;
public Djia(String dt, double opening, double closing) throws ParseException {
DateFormat stringDate = new SimpleDateFormat("dd-MM-yyyy");
Date date = stringDate.parse(dt);
Calendar gCal = new GregorianCalendar();
gCal.setTime(date);
this.opening = opening;
this.closing = closing;
}
public String date() {
String date;
SimpleDateFormat dateformat = new SimpleDateFormat("dd-MM-yyyy");
date = dateformat.format(this.date.getTime());
return date;
}
public double opening() {
return opening;
}
public double closing() {
return closing;
}
//...
}
Основной метод:
Я выполнил здесь синтаксический анализ и форматирование, потому что месяцы являются строковыми представлениями в данном текстовом файле. Сначала я проанализировал месяцы до целочисленного представления, а затем отформатировал их с даты на строку, потому что класс Djia принимает только дату как строку.
Scanner input = new Scanner(new File("file.txt"));
while (input.hasNextLine()) {
String line = input.nextLine();
String[] fields = line.split(" ");
String date = fields[0];
SimpleDateFormat simpleDate = new SimpleDateFormat("d-MMM-yyyy");
Date nDate = simpleDate.parse(date);
Format stringDate = new SimpleDateFormat("dd-MM-yyyy");
String newDate = stringDate.format(nDate);
double closing = Double.parseDouble(fields[2]);
double opening = Double.parseDouble(fields[1]);
Djia newDjia = new Djia(newDate, opening, closing);
//...
}
d-MMM-yyyy
при синтаксическом разборе, учитывая, что у вас не всегда есть две цифры. c)dd-mm-yyyy
должно бытьdd-MM-yyyy
, посколькуmm
означает минуты, а не месяцы. См. codeblog.jonskeet.uk/ 2015/05/05 / для получения дополнительных советов. - person Jon Skeet   schedule 22.05.2015Djia
? Хотя ваш профессор может плохо преподавать, это не мешает вам четко объяснить свою проблему. Прочтите tinyurl.com/stack-hints - person Jon Skeet   schedule 22.05.2015Djia
принимаетString
, а неDate
илиCaledar
, по-прежнему нет указаний на то, как создается последняя строка. Вы прочитали tinyurl.com/stack-hints, как я предлагал? - person Jon Skeet   schedule 22.05.2015private GregorianCalendar date;
все ещеnull
, потому что вы не инициализируете ее где-то. Вы создаете несколько локальных переменных с именемdate
, но это не имеет ничего общего с вашим полем экземпляраdate
. - person Tom   schedule 22.05.2015