JavaFX выбирает дату и время и сохраняет в MySQL [дубликат]

Вот почти полная функция javascript, которая позволит использовать несколько маркеров в JSONObject.

Он отображает только маркеры, которые находятся в границах карты.

Это важно, поэтому вы не делаете дополнительной работы.

Вы также можете установить ограничение на маркеры, чтобы вы не показывали экстремальное количество маркеров (если есть возможность использования в вашем использовании);

он также будет не отображать маркеры, если центр карты не изменился более чем на 500 метров. Это важно, потому что, если пользователь нажимает маркер и случайно перетаскивает карту, делая это, вы не хотите, чтобы карта перезагружала маркеры.

Я привязал эту функцию к прослушивателю событий бездействия для карты поэтому маркеры будут отображаться только в том случае, если карта неактивна и будет повторно отображать маркеры после другого события.

В снимке экрана действий небольшое изменение в снимке экрана показывает больше содержимого в инфо-окне. , вставленный из pastbin.com

81
задан BalusC 24 January 2012 в 21:04
поделиться

5 ответов

JodaTime

Чтобы преобразовать JodaTime org.joda.time.LocalDate в java.sql.Timestamp , просто сделайте

Timestamp timestamp = new Timestamp(localDate.toDateTimeAtStartOfDay().getMillis());

Чтобы преобразовать JodaTime org.joda.time.LocalDateTime - java.sql.Timestamp , просто сделайте

Timestamp timestamp = new Timestamp(localDateTime.toDateTime().getMillis());

JavaTime

Чтобы преобразовать Java8 в java.time.LocalDate до java.sql.Timestamp , просто сделайте

Timestamp timestamp = Timestamp.valueOf(localDate.atStartOfDay());

Чтобы преобразовать [8] [8] [8] java.sql.Timestamp , просто сделайте

Timestamp timestamp = Timestamp.valueOf(localDateTime);
190
ответ дан BalusC 29 August 2018 в 02:03
поделиться

tl; dr

Проект Joda-Time находится в режиме обслуживания, теперь вытесняется классами java.time .

  • Просто используйте класс java.time.Instant .
  • Не нужно: LocalDateTime java.sql.Timestamp Строки

Захват текущий момент в UTC.

Instant.now()  

Чтобы сохранить этот момент в базе данных:

myPreparedStatement.setObject( … , Instant.now() )  // Writes an `Instant` to database.

Чтобы извлечь этот момент из базы данных:

myResultSet.getObject( … , Instant.class )  // Instantiates a `Instant`

To отрегулируйте время настенных часов по отношению к конкретному часовому поясу.

instant.atZone( z )  // Instantiates a `ZonedDateTime`

LocalDateTime - это неправильный класс

. Ответы правильны, но они не указывают, что LocalDateTime - неправильный класс для вашей цели.

В обоих java.time и Joda-Time , LocalDateTime преднамеренно отсутствует какая-либо концепция часового пояса или смещение-от-UTC. Таким образом, не представляет момент, и не указывает точку на временной шкале. A LocalDateTime представляет собой приблизительное представление о моменте потенциала в диапазоне около 26-27 часов.

Используйте LocalDateTime для тех случаев, когда зона / смещение неизвестно (не очень хорошая ситуация) или когда смещение зоны является неопределенным. Например, «Начало Рождества в первый момент 25 декабря 2018 года» будет представлено как LocalDateTime.

Используйте ZonedDateTime для представления момента в определенном часовом поясе. Например, начало Рождества в любой конкретной зоне, такой как Pacific/Auckland или America/Montreal, будет представлено объектом ZonedDateTime .

В течение некоторого времени всегда в UTC используйте Instant.

Instant instant = Instant.now() ;  // Capture the current moment in UTC.

Применить часовой пояс. В тот же момент, та же точка на временной шкале, но просматривается с другим временем настенных часов.

ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;  // Same moment, different wall-clock time.

Итак, если я могу просто конвертировать между LocalDate и LocalDateTime,

Нет, неправильная стратегия. Если у вас есть значение только для даты, и вы хотите ввести дату-время, вы должны указать время суток. Это время суток может быть недействительным в эту дату для определенной зоны - в этом случае класс ZonedDateTime автоматически настраивает время суток по мере необходимости.

LocalDate ld = LocalDate.of( 2018 , Month.JANUARY , 23 ) ;
LocalTime lt = LocalTime.of( 14 , 0 ) ;  // 14:00 = 2 PM.
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;

Если вы хотите, чтобы первый момент дня, как ваше время суток, пусть java.time определяет этот момент. Не думайте, что день начинается в 00:00:00. Аномалии, такие как переход на летнее время (DST), означают, что день может начаться в другое время, например, 01:00:00.

ZonedDateTime zdt = ld.atStartOfDay( z ) ;

java.sql.Timestamp - неправильный класс

java.sql.Timestamp является частью проблемных старых классов времени, которые теперь являются устаревшими, полностью вытесняются классами java.time . Этот класс использовался для представления момента в UTC с разрешением наносекунд . Эта цель теперь обслуживается с помощью java.time.Instant .

JDBC 4.2 с getObject / setObject

Начиная с JDBC 4.2 , а затем ваш JDBC-драйвер может напрямую обменивать java.time-объекты с базой данных, вызывая:

Например:

myPreparedStatement.setObject( … , instant ) ;

... и ...

Instant instant = myResultSet.getObject( … , Instant.class ) ;

Преобразование устаревших ⬌ современных

Если вы должны взаимодействовать со старым кодом, еще не обновленным до java.time , конвертировать туда и обратно с помощью новых методов, добавленных в старые классы.

Instant instant = myJavaSqlTimestamp.toInstant() ;  // Going from legacy class to modern class.

... и ...

java.sql.Timestamp myJavaSqlTimestamp = java.sql.Timestamp.from( instant ) ;  // Going from modern class to legacy class.

О 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 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 .

6
ответ дан Basil Bourque 29 August 2018 в 02:03
поделиться

Лучший способ использовать Java 8 time API:

  LocalDateTime ldt = timeStamp.toLocalDateTime();
  Timestamp ts = Timestamp.valueOf(dateTime);

Для использования с JPA введите вашу модель ( https://weblogs.java.net/blog/montanajava/archive / 2014/06/17 / using-java-8-datetime-classes-jpa ):

@Converter(autoApply = true)
public class LocalDateTimeConverter implements AttributeConverter<LocalDateTime, Timestamp> {
    @Override
    public Timestamp convertToDatabaseColumn(LocalDateTime ldt) {
        return Timestamp.valueOf(ldt);
    }

    @Override
    public LocalDateTime convertToEntityAttribute(Timestamp ts) {
        return ts.toLocalDateTime();
    }
}

Так что теперь это относительное время, зависящее от времени. Кроме того, это легко сделать:

  LocalDate ld = ldt.toLocalDate();
  LocalTime lt = ldt.toLocalTime();

Форматирование:

 DateTimeFormatter DATE_TME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")
 String str = ldt.format(DATE_TME_FORMATTER);
 ldt = LocalDateTime.parse(str, DATE_TME_FORMATTER);

UPDATE: postgres 9.4.1208, HSQLDB 2.4.0 и т. Д. Понять Java 8 Time API без каких-либо разговоров!

41
ответ дан GKislin 29 August 2018 в 02:03
поделиться

С тех пор, как Джода угасает, кто-то может захотеть преобразовать LocaltDate в LocalDateTime в Java 8. В Java 8 LocalDateTime он даст возможность создать экземпляр LocalDateTime с помощью LocalDate и LocalTime. Проверьте здесь.

public static LocalDateTime of (LocalDate date, LocalTime time)

Образец будет,

    // just to create a sample LocalDate
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd");
    LocalDate ld = LocalDate.parse("20180306", dtf);

    // convert ld into a LocalDateTime
    // We need to specify the LocalTime component here as well, it can be any accepted value
    LocalDateTime ldt = LocalDateTime.of(ld, LocalTime.of(0,0)); // 2018-03-06T00:00

Только для справки. Для получения секунд секунд ниже можно использовать

    ZoneId zoneId = ZoneId.systemDefault();
    long epoch = ldt.atZone(zoneId).toEpochSecond(); 

    // If you only care about UTC
    long epochUTC = ldt.toEpochSecond(ZoneOffset.UTC);
0
ответ дан prime 29 August 2018 в 02:03
поделиться

В зависимости от вашего часового пояса вы можете потерять несколько минут (1650-01-01 00:00:00 станет 1649-12-31 23:52:58)

Используйте следующий код, чтобы избежать что

new Timestamp(localDateTime.getYear() - 1900, localDateTime.getMonthOfYear() - 1, localDateTime.getDayOfMonth(), localDateTime.getHourOfDay(), localDateTime.getMinuteOfHour(), localDateTime.getSecondOfMinute(), fractional);
5
ответ дан user1302021 29 August 2018 в 02:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: