我试图将字符串日期解析为特定的日期格式,但是当我使用来自SimpleDateFormat
的选项时,结果总是不同的。这是我试图解析的字符串:
String datetToParse = ""2019-07-04 00:32:08:627158"" into 04-JUL-19 12.32.08.627158000 AM.
我可以使用simpledateformat或任何其他日期格式化程序来实现这一点吗?任何帮助都将不胜感激。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormat {
public static void main(String[] args) {
String date = "2019-07-04 00:32:08:627158";
SimpleDateFormat sf = new SimpleDateFormat("yymmdd");
Date d = null;
try {
d= sf.parse(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(d);
}
}
发布于 2019-12-06 01:49:44
与长期反对的SimpleDateFormat
和java.util.Date
不同,您应该在java.time
和java.time.format
包中使用新的DateTimeFormatter
和LocalDateTime
。如果没有其他原因,除了SimpleDateFormat
没有提供纳秒分辨率(而且您的输入似乎有纳秒)。
就像,
String date = "2019-07-04 00:32:08:627158";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
"yyyy-MM-dd HH:m:ss:nnnnnn");
LocalDateTime ldt = LocalDateTime.parse(date, formatter);
DateTimeFormatter outFormatter = DateTimeFormatter.ofPattern(
"dd-MMM-yy hh.mm.ss.nnnnnn a");
System.out.println(outFormatter.format(ldt));
输出
04-Jul-19 12.32.08.627158 AM
如果您想要JUL
添加一个toUpperCase()
调用,如果您需要一个额外的三个0,那么将它们添加到outFormatter
中。喜欢,
DateTimeFormatter outFormatter = DateTimeFormatter.ofPattern(
"dd-MMM-yy hh.mm.ss.nnnnnn000 a");
System.out.println(outFormatter.format(ldt).toUpperCase());
输出
04-JUL-19 12.32.08.627158000 AM
现在还不清楚这三个零是从哪里来的,如果你想要更精确,我会用
DateTimeFormatter outFormatter = DateTimeFormatter.ofPattern(
"dd-MMM-yy hh.mm.ss.nnnnnnnnn a");
System.out.println(outFormatter.format(ldt).toUpperCase());
但输出结果(如我所料)
04-JUL-19 12.32.08.000627158 AM
发布于 2019-12-06 01:59:24
如果小数部分是微秒,以0到6位之间的数字(高达999,999微秒)写入,那么您可以在格式化程序中指定ChronoFIeld.MICRO_OF_SECOND
:
DateTimeFormatter msecFormatter = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd HH:mm:ss:")
.appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, false)
.toFormatter();
LocalDateTime ldt = LocalDateTime.parse("2019-07-04 00:32:08:627158", msecFormatter);
DateTimeFormatter nsFormatter = DateTimeFormatter.ofPattern("dd-MMM-yy hh.mm.ss.n a");
System.out.println(nsFormatter.format(ldt).toUpperCase());
https://stackoverflow.com/questions/59205539
复制相似问题