Строка ошибки «Ссылка на объект, не установленная на экземпляр объекта.» указывает, что вы не назначили экземпляр объекта объектной ссылке, и все же вы получаете доступ к свойствам / методам этого объекта.
например: скажем, у вас есть класс под названием myClass и он содержит одно свойство prop1.
public Class myClass
{
public int prop1 {get;set;}
}
Теперь вы получаете доступ к этому prop1 в каком-то другом классе, как показано ниже:
public class Demo
{
public void testMethod()
{
myClass ref = null;
ref.prop1 = 1; //This line throws error
}
}
выше строки выдает ошибку, потому что ссылка класса myClass объявлена, но не создана, или экземпляр объекта не назначается referecne этого класса.
Чтобы исправить это, вам нужно создать экземпляр (присвоить объект ссылке на этот класс).
public class Demo
{
public void testMethod()
{
myClass ref = null;
ref = new myClass();
ref.prop1 = 1;
}
}
java.util.Date.from (
LocalDateTime.parse(
"Wed, 09 Feb 2011 12:34:27" ,
DateTimeFormatter.ofPattern( "EEE, dd MMM uuuu HH:mm:ss" , Locale.US )
).atZone( ZoneId.of( "America/Montreal" ) )
.toInstant()
)
Вопрос и другой ответ используют устаревшие неприятные старые классы времени, которые теперь являются устаревшими, вытесняются классами java.time .
В строке ввода отсутствует какая-либо индикация часового пояса или offset-from-UTC. Итак, мы анализируем как OffsetDateTime
.
Укажите Locale
, чтобы определить (a) человеческий язык для перевода имени дня, название месяца и т. д., и (б) культурные нормы, решающие вопросы аббревиатуры, капитализации, пунктуации, разделители и т. д.
String input = "Wed, 09 Feb 2011 12:34:27" ;
Locale l = Locale.US ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE, dd MMM uuuu HH:mm:ss" , l ) ;
LocalDateTime ldt = LocalDateTime.parse( input , f ) ;
ldt.toString (): 2011-02 -09T12: 34: 27
blockquote>Часовой пояс
Как в вопросе, так и в другом ответе игнорируется ключевая проблема часового пояса.
В строке ввода отсутствует часовой пояс или смещение. Мы проанализировали как
LocalDateTime
, который не момент на временной шкале, только смутное представление о возможных моментах. Например, «Рождество начинается в полночь 25 декабря 2017 года», это не имеет значения, пока вы не разместите его в контексте определенного часового пояса. Рождество происходит гораздо раньше в Окленде Новая Зеландия, чем в Париже во Франции, а еще много еще в Монреале Квебеке.Если вы знаете предполагаемый часовой пояс, назначьте
ZoneId
для созданияZonedDateTime
.ZoneId z = ZoneId.of( "America/Montreal" ) ; ZonedDateTime zdt = ldt.atZone( z ); // Assigning a time zone to determine an actual moment on the timeline.
Преобразование
Лучше всего избежать неприятностей старые устаревшие классы времени. Но если вы должны взаимодействовать со старым кодом, который еще не обновлен до типов java.time, вы можете преобразовать между устаревшими классами и java.time. Посмотрите на новые методы, добавленные к старым классам.
A
java.util.Date
- момент на временной шкале в UTC. Поэтому нам нужно извлечьInstant
из нашегоZonedDateTime
. КлассInstant
представляет момент на временной шкале в UTC с разрешением наносекунд (до девяти (9) цифр десятичной доля).Instant instant = zdt.toInstant() ; java.util.Date d = java.util.Date.from( instant ) ; // Convert from java.time to legacy class.
Переход в другое направление.
Instant instant = d.toInstant() ; // Convert from legacy class to java.time class. ZonedDateTime zdt = instant.atZone( z ) ; // Adjust from UTC into a particular time zone.
О java.time
Структура java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют неприятные старые классы времени legacy , такие как
java.util.Date
,Calendar
и & amp;SimpleDateFormat
.Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на java.time .
Чтобы узнать больше, см. учебник Oracle . И поиск Stack Overflow для многих примеров и объяснений. Спецификация JSR 310 .
Вы можете обменивать java.time объекты непосредственно с вашей базой данных. Используйте драйвер JDBC , соответствующий JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в классах
java.sql.*
.Где получить классы java.time?
- Java SE 8 , Java SE 9 , Java SE 10 и позже Встроенный. Часть стандартного Java API с интегрированной реализацией. Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и Java SE 7 Большая часть функций java.time портирована на Java 6 & amp; 7 в ThreeTen-Backport .
- Android Более поздние версии реализаций пакетов Android для классов java.time. Для более ранних Android (& lt; 26) проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше). См. Как использовать ThreeTenABP ... .
Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как
Interval
,YearWeek
,YearQuarter
и more .