我的要求:
我在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
答案 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
}}值。