В чем разница между гравитацией и layout_gravity в Android?

tl; dr
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 .

Использование 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?

Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval , YearWeek , YearQuarter и more .

1257
задан Bernd Wilke πφ 12 February 2019 в 08:57
поделиться

2 ответа

Их имена должны помочь вам:

  • android: gravity устанавливает плотность содержимого (т.е. его подвиды) View , в котором он используется.
  • android: layout_gravity устанавливает плотность View или Layout относительно его родительского.

И пример здесь .

1320
ответ дан 19 December 2019 в 20:16
поделиться

Из того, что я могу понять, layout_gravity - это гравитация этого вида внутри его родительского вида, а gravity - это гравитация дочерних элементов внутри этого вида.

Я думаю, что это правильно, но лучший способ узнать это - поиграться.

35
ответ дан 19 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

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