我的要求:
我得到了埃波奇米利的价值
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”类型
我可以处理预期的数据,但结果是字符串,当转换回长时,前导零丢失。(我想保留长度为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:或者我需要任何其他想法。我需要使用Setter方法设置时间,如0803072816[MM dd HH MM ss],该方法只接受长值。没有格式化的Long(以毫秒为单位)也适用于格式化程序Long值或未格式化的time(以毫秒为单位),在这两种情况下,长度应正好等于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属性,可以假设前面有任何零,但其字符串表示给出了最短的版本。
要接收某个宽度的字符串表示,在输出点使用String.format("0d", n)/System.out.printf("0d%n", n)
。
你不能,因为long没有前导零。long应该存储整数(数学概念,而不是int)。
像05这样的字符串不是整数,5是。您可以做的是在打印时用前导零格式化包含5的长字符串,参见例如java.util.格式化。
你确定你想要一个长/整数吗?你想用它做什么?复制自:将字符串解析为带前导零的长字符串
对于计算机来说,像00012
(在内存中)这样的长数字与12
相同。它不在乎前导0。
只要我知道你不是电脑。所以你们看的不是计算机数字,而是这个数字的视觉表示。此表示是一个字符串,可以有前导0。
无论你如何处理你的长值,省略前导0是完全正常的。获得这些0的唯一方法是在需要显示时使用字符串格式化程序。
例如:String。格式(“ 0d”,myNumber)
编辑:我写了“00012
(在内存中)”,以免与字符串“00012”
到long
的转换混淆,这是数字10的八进制表示