簡體   English   中英

Java中的字符串到Long

[英]String to Long in 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);
}

最終目標是獲取上述格式的格式化時間,結果應為“ long”類型

我可以處理預期的數據,但會生成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,我希望它是格式化的long(長度為10)

Edit1:或者我需要任何其他想法。 我需要使用設置器方法設置時間,如0803072816 [MM-dd-HH-mm-ss],該方法僅接受Long值。 以毫秒為單位的長時間(不進行格式化)也可以格式化長整型值或以毫秒為單位的未格式化時間,在兩種情況下,長度都應精確等於10

對於計算機,像00012這樣的長數字(在內存中)與12相同。 它並不關心前導0。

只要我知道您不是計算機。 因此,您無需閱讀計算機編號,而是可以直觀地看到此編號。 此表示形式是字符串,並且可以以0開頭。

無論您使用多長值做什么,完全省略前導0都是很正常的。 獲得這些0的唯一方法是在需要顯示時使用字符串格式器。

例如: String.format("%010d", myNumber)

編輯:我寫了“ 00012 (在內存中)”,以免將其與字符串"00012"轉換為long混淆, long是數字10的八進制表示形式

您不能因為long沒有前導零。 long應該存儲整數(數學概念,而不是int)。

像05這樣的字符串不是整數,而是5。 您可以做的是,在打印時格式化一個包含前導零的5的長整數,例如,參見java.util.Formatter。

您確定要長整數嗎? 您想怎么辦? 從以下位置復制:將字符串解析為以零開頭的long

所以你有類似

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位,就像以0為底16一樣。

總結一下:

long / int始終不具有width屬性,並且可以假定其前面帶有任何零,但其toString()字符串表示形式給出了最短的版本。

要接收一定寬度的字符串表示形式,請在輸出點使用String.format("%010d", n) / System.out.printf("%010d%n", n)

long永遠無法格式化。只能格式化String 。如果需要使用long值,則可以使用Long.parseLong方法輕松地將其解析為long

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM