Строка в 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 значение.

Другие вопросы по тегам