Строка в Long в Java
Мое требование:
Я получаю значение в EpochMillis
public void Method(){
//long val = epoch time in millis
//Format the (val)epochtime in MMddHHmmss and set ZoneOffset.UTC
//long formattedTime = formatted time;
obj.setTime(formattedTime);
}
Конечная цель состоит в том, чтобы получить отформатированное время в вышеупомянутом формате, и результат должен быть в "длинном" типе
Я могу обработать ожидаемые данные, но в результате получается String, при обратном преобразовании в Long ведущие нули теряются. (Я хочу сохранить длину как 10 - в соответствии с форматом)
Может кто-нибудь помочь?
Я попробовал ниже
final long timeInMillis = Instant.now().toEpochMilli();`
final Instant instant = Instant.ofEpochMilli(Long.valueOf(timeInMillis));`
final String formattedDate = DateTimeFormatter.ofPattern("MMddHHmmss").withZone(ZoneOffset.UTC).format(instant);
Здесь я мог получить только String, я ожидаю долго, который отформатирован (10 в длину)
Edit1: Или мне нужна другая идея. Мне нужно установить время, например, 0803072816 [ММ-дд-ЧЧ-мм-сс], используя метод установки, который принимает только длинное значение. Длинное в миллисекундах без форматирования также подойдет либо для длинного значения форматера, либо для неформатированного времени в миллисекундах, в обоих случаях длина должна быть точно = 10
4 ответа
Для компьютера длинный номер, как 00012
(в памяти) так же, как 12
, Это не заботится о ведении 0.
Пока я знаю, что ты не компьютер. Таким образом, вы читаете не номер компьютера, а визуальное представление этого номера. Это представление является строкой и может иметь начальный 0.
Что бы вы ни делали со своим длинным значением, совершенно нормально, что ведущие 0 опускаются. Единственный способ получить эти 0 - использовать форматировщик String всякий раз, когда вам нужно его отобразить.
Например: String.format("%010d", myNumber)
Редактировать: я написал00012
(в памяти)"не путать это с преобразованием строки "00012"
в long
, которое является восьмеричным представлением числа 10
Итак, у вас есть что-то вроде
String s = "0128115900";
long n = Long.parse(s, 10); // 128115900L
String t = String.format("%010d", n); // "0128115900"
В большинстве языков программирования числа не имеют фиксированной ширины с 0 отступами, только в SQL есть ширина для "хранения".
И кстати -:
long n = 0128115900L; // Error, octal number with digits 0-7
на самом деле означает что-то еще: предшествующий 0 приводит к тому, что число находится в базе 8, где каждая цифра представляет 3 бита, так же как предыдущий 0x, если для базы 16.
Итак, резюмируем:
Long/int всегда не имеет свойства width, и можно предположить, что ему предшествуют любые нули, но его
toString()
строковое представление дает самую короткую версию.Чтобы получить строковое представление некоторой ширины, в точке вывода используйте
String.format("%010d", n) / System.out.printf("%010d%n", n)
,
Вы не можете, потому что у длинного нет начального нуля. Long должен хранить целые числа (математическая концепция, а не int).
Строка символов, таких как 05, не является целым числом, 5 является. Что вы можете сделать, это отформатировать long, который содержит 5 с начальным нулем при печати, см., Например, java.util.Formatter.
Вы уверены, что хотите получить длинное / целое число? Что ты хочешь с этим делать? Скопировано из: Parse String в long с ведущим нулем
long
никогда не может быть отформатирован. String
можно отформатировать. Вы можете разобрать строку long
легко методом Long.parseLong
если вам нужно его long
значение.