Я не очень хорошо знаком с объектами даты, поэтому я подумал, что спрошу, как я попрошу пользователя ввести дату, совместимую со следующим методом, который я нашел, чтобы найти разницу в днях:
public long diferenciaFecha(LocalDate pfecha1, LocalDate pfecha2){
LocalDate fecha1 = pfecha1;
LocalDate fecha2 = pfecha2;
Period p = Period.between(fecha1, fecha2);
long resul = ChronoUnit.DAYS.between(fecha1, fecha2);
System.out.println(" Han pasado: " + resul + " dias.)");
return resul;
}
}
Каким будет формат ввода?
Заранее большое спасибо
Программирование, связанное с временем, может быть очень расстраивающим. Временные классы были изобретены, чтобы помочь манипулировать значениями времени и помочь преобразовать текстовые и числовые значения в значения времени. Если вы используете классы Java, такие как LocalDate и ChronoUnit, вы можете найти их на сайте Oracle с помощью простого поиска в Google имени класса.
Если у вас возникли проблемы с днями, я настоятельно рекомендую вам дать обзор временных классов, потому что когда вы получаете возможность манипулировать часами и часовыми поясами и т.д. это будет сложнее.
http://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html
"публичный конечный класс LocalDate
расширяет объект
реализует Temporal, TemporalAdjuster, ChronoLocalDate, Serializable
Дата без временной зоны в календарной системе ISO-8601, например, 2007-12-03. "
http://docs.oracle.com/javase/8/docs/api/java/time/temporal/ChronoUnit.html
Ваш код, похоже, использует новый пакет java.time в Java 8. Чтобы убедиться, посмотрите инструкции import
.
Класс LocalDate использует статический заводский метод для создания экземпляров, а не конструкторов. См. Документ для нескольких методов.
LocalDate now = LocalDate.now ( ZoneId.of( "America/Montreal" ) );
Или…
LocalDate localDate = LocalDate.of( 2014, 1, 23 ); // year, month, day.
Если пользователь вводит текст, проанализируйте его как числа.
LocalDate localDate = LocalDate.of( Integer.parseInt( "2014") , Integer.parseInt( "1") , Integer.parseInt( "23") );
Или проанализируйте как одну строку в стандартном формате ISO 8601.
LocalDate localDate = LocalDate.parse( "2014-01-23" ) ;
Для других форматов поиск Qaru для многих обсуждений и примеры синтаксического анализа строк с классом DateTimeFormatter
.
Рамка java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют неприятные старые устаревшие классы времени, такие как java.util.Date
, Calendar
и SimpleDateFormat
.
Проект Joda-Time, теперь в режиме обслуживания, советует перейти на классы java.time.
Чтобы узнать больше, ознакомьтесь с учебным пособием Oracle. И поиск Qaru для многих примеров и объяснений. Спецификация - JSR 310.
Используя JDBC-драйвер, совместимый с JDBC 4.2 или более поздней версией, вы можете обменивать объекты java.time непосредственно с вашей базой данных. Нет необходимости в строках или классах java.sql. *.
Где можно получить классы java.time?
Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и другие.