Java中的字符串到长整数

时间:2018-08-03 09:16:10

标签: java time java-8 java.time.instant

我的要求:

我在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,我希望它是格式化的long(长度为10)

编辑1: 或者我需要其他任何想法。 我需要使用设置器方法设置时间,如0803072816 [MM-dd-HH-mm-ss],该方法仅接受Long值。 毫秒级而无需格式化也可以 格式化程序的长值或未格式化的时间(以毫秒为单位),在两种情况下,长度都应精确为10

4 个答案:

答案 0 :(得分:3)

对于计算机,00012(在内存中)之类的长数字与12相同。不在乎前导0。

只要我知道您不是计算机。因此,您无需阅读计算机编号,而是可以直观地看到此编号。 此表示形式是一个字符串,并且可以以0开头。

无论您使用多长值做什么,完全省略前导0都是很正常的。 获得这些0的唯一方法是在需要显示时使用String格式化程序。

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

编辑:我写了“ 00012(在内存中)”,以免将其与字符串"00012"long的转换混淆,后者是数字10的八进制表示形式< / p>

答案 1 :(得分:2)

您不能因为多头没有前导零。应该使用long存储整数(数学概念,而不是int)。

像05这样的字符串不是整数,而是5。您可以做的是在打印时以5开头的0格式化长整型,例如java.util.Formatter。

您确定要长整数吗?您想怎么办? 复制自: Parse String to long with leading zero

答案 2 :(得分:2)

所以你有类似的东西

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位,就如以16为底,则前0x一样。

所以回顾一下:

  

long / int始终没有width属性,可以假定其前面带有任何零,但是其toString()字符串表示形式给出的是最短的版本。

     

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

答案 3 :(得分:0)

long永远无法格式化。只能格式化String。如果需要使用{{1},可以使用方法long将字符串解析为Long.parseLong }}值。