Viv*_*dev 0 java milliseconds simpledateformat datetime-parsing
我试图将日期字符串转换为10毫秒(2018-11-02 6:05:59.1541162159 PM)到目前为止,但无法获得确切的日期.
要转换的代码:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class DateFormatCheck {
private static TimeZone tz = TimeZone.getTimeZone("Asia/Colombo");
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS aa");
public static void main(String[] a){
try {
Calendar cal = Calendar.getInstance(tz);
sdf.setCalendar(cal);
cal.setTime(sdf.parse("2018-11-02 6:05:59.1541162159 PM"));
Date date = cal.getTime();
System.out.println(date);
}catch (Exception e){
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Tue Nov 20 02:12:01 IST 2018
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 13
目前存在多个问题.我强烈建议java.time尽可能多地使用,尽管这样做并不容易.
正如你所说,你的值有10位数的"一秒的分数" - 这意味着它降低到十分之一秒的精度.根据我的经验,这是非常不寻常的开始 - 我认为 Java无法处理,即使是java.time.
我怀疑你需要先按下数据,精确到9位数.那时,将值解析为ZonedDateTime:相当简单:
// Note this only has 9 digits of precision, not the original 10
String text = "2018-11-02 6:05:59.154116215 PM";
ZoneId zone = ZoneId.of("Asia/Colombo");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
"yyyy-MM-dd h:mm:ss.SSSSSSSSS a", Locale.US)
.withZone(zone);
ZonedDateTime parsed = ZonedDateTime.parse(text, formatter);
System.out.println(parsed);
Run Code Online (Sandbox Code Playgroud)
请注意我SSSSSSSSS是如何提供的,作为第二部分,以处理所有9位数.另请注意,使用h而不是HH- HH意味着"一天24小时,0填充" - 对于原始值,其中任何一部分都不是真的,下午6点使用"6".这是非常罕见的,你会想结合H或HH与a.
该代码为您提供了一个ZonedDateTime,您可以将其转换为Date如下所示:
Date date = Date.from(parsed.toInstant());
Run Code Online (Sandbox Code Playgroud)
我建议你不要这样做,除非你真的,真的需要互相支持; 该DateAPI是通过各种方式讨厌.