当前位置: 首页 > 知识库问答 >
问题:

String to Long inJava

严稳
2023-03-14

我的要求:

我得到了埃波奇米利的价值

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

共有3个答案

沈国安
2023-03-14

所以你有这样的想法

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)

龙弘盛
2023-03-14

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

像05这样的字符串不是整数,5是。您可以做的是在打印时用前导零格式化包含5的长字符串,参见例如java.util.格式化。

你确定你想要一个长/整数吗?你想用它做什么?复制自:将字符串解析为带前导零的长字符串

韩禄
2023-03-14

对于计算机来说,像00012(在内存中)这样的长数字与12相同。它不在乎前导0。

只要我知道你不是电脑。所以你们看的不是计算机数字,而是这个数字的视觉表示。此表示是一个字符串,可以有前导0。

无论你如何处理你的长值,省略前导0是完全正常的。获得这些0的唯一方法是在需要显示时使用字符串格式化程序

例如:String。格式(“ 0d”,myNumber)

编辑:我写了“00012(在内存中)”,以免与字符串“00012”long的转换混淆,这是数字10的八进制表示

 类似资料:

相关问答

相关文章

相关阅读