The Answer by Samson Scharfrichter правильно и должны быть приняты. Я просто добавлю несколько слов о типах java.time.
Преобразование между строковыми ↔ java.time.Instant
The java.time классов вытеснять неприятные старые устаревшие классы даты и времени, такие как java.sql.Timestamp
.
Instant
класса представляет момент на временной шкале в UTC с разрешением nanoseconds (до девяти (9) цифр десятичной дроби).
Ваша строка ввода соответствует стандарту ISO 8601. В классах java.time по умолчанию используются форматы ISO 8601 при разборе/генерации строк, которые представляют значения даты и времени. Поэтому нет необходимости указывать шаблон форматирования. Вы можете напрямую проанализировать свою строку как объект Instant
.
В вашей строке ввода отсутствует указатель смещения-от-UTC или часового пояса. Если он должен был быть в формате UTC, добавьте Z
для Zulu
, что означает UTC.
Instant instant = Instant.parse("2015-05-09T09:00:12.123462000" + "Z");
Вы можете создать такую строку, просто назовите toString
. Формат форматирования по умолчанию, используемый toString
, печатает десятичную дробь в группах по три цифры по мере необходимости. В этом примере последние три цифры являются нулями, поэтому они опущены.
String output = instant.toString();
2015-05-09T09: 00: 12.123462Z
Чтобы сделать это в SQL-стиль строки ожидаемой улья, замените T
с пространством и удалить Z
.
String inputForHive = output.replace("T" , " ").replace("Z" , "");
2015-05-09 09:00:12.123462
Преобразование из чисел
улья также обеспечивает для преобразования из:
- целое число
графа целых секунд от Unix/Posix epoch начала 1970 UTC (1970-01-01T00:00:00Z
).
- номер с плавающей запятой
То же, что и выше, но с долей секунды в разрешении до наносекунд.
Второй, который я предлагаю вам избежать. Типы floating-point, такие как float
, Float
, double
и Double
в Java намеренно обмениваются точностью для более быстрого выполнения. Это часто приводит к посторонним цифрам в конце вашей десятичной дроби. Если вам нужна дробная секунда, придерживайтесь типа String & Instant
.
Первый из них можно легко получить из Instant
, вызвав метод getEpochSecond
. Конечно, это означает потерю данных, поскольку этот метод оставляет за собой какую-то дробную секунду.
long secondsSinceEpoch = instant.getEpochSecond();
Идёт в другую сторону.
Instant instant = Instant.ofEpochSecond(secondsSinceEpoch);
Сравнение
После того, как у вас есть ваши Instant
объекты можно сравнить с такими методами, как compareTo
, equals
, isBefore
, isAfter
.
Boolean happenedBefore = thisInstant.isBefore(thatInstant);
О java.time
java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые классы времени, такие как java.util.Date
, .Calendar
, & java.text.SimpleDateFormat
.
Проект Joda-Time, теперь в maintenance mode, советует перейти на java.time.
Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений.
Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport и дополнительно выполнен с возможностью Android в ThreeTenABP (см How to use…).
Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more.
ИМХО это в значительной степени не по теме. Интерфейс Hive - это SQL (вид).Это скин вокруг типов Java и методов Java, true; но тот, кто задает короткий вопрос без особого контекста, как этот, вряд ли будет интересоваться деталями реализации Hive или тем, что вы могли бы сделать за пределами Hive. –