首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用simpledateformat解析6位毫秒的字符串日期

使用simpledateformat解析6位毫秒的字符串日期
EN

Stack Overflow用户
提问于 2019-12-06 01:16:02
回答 2查看 2K关注 0票数 2

我试图将字符串日期解析为特定的日期格式,但是当我使用来自SimpleDateFormat的选项时,结果总是不同的。这是我试图解析的字符串:

代码语言:javascript
运行
复制
String datetToParse = ""2019-07-04 00:32:08:627158"" into  04-JUL-19 12.32.08.627158000 AM. 

我可以使用simpledateformat或任何其他日期格式化程序来实现这一点吗?任何帮助都将不胜感激。

代码语言:javascript
运行
复制
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);

    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-06 01:49:44

与长期反对的SimpleDateFormatjava.util.Date不同,您应该在java.timejava.time.format包中使用新的DateTimeFormatterLocalDateTime。如果没有其他原因,除了SimpleDateFormat没有提供纳秒分辨率(而且您的输入似乎有纳秒)。

就像,

代码语言:javascript
运行
复制
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));

输出

代码语言:javascript
运行
复制
04-Jul-19 12.32.08.627158 AM

如果您想要JUL添加一个toUpperCase()调用,如果您需要一个额外的三个0,那么将它们添加到outFormatter中。喜欢,

代码语言:javascript
运行
复制
DateTimeFormatter outFormatter = DateTimeFormatter.ofPattern(
        "dd-MMM-yy hh.mm.ss.nnnnnn000 a");
System.out.println(outFormatter.format(ldt).toUpperCase());

输出

代码语言:javascript
运行
复制
04-JUL-19 12.32.08.627158000 AM

现在还不清楚这三个零是从哪里来的,如果你想要更精确,我会用

代码语言:javascript
运行
复制
DateTimeFormatter outFormatter = DateTimeFormatter.ofPattern(
        "dd-MMM-yy hh.mm.ss.nnnnnnnnn a");
System.out.println(outFormatter.format(ldt).toUpperCase());

但输出结果(如我所料)

代码语言:javascript
运行
复制
04-JUL-19 12.32.08.000627158 AM
票数 5
EN

Stack Overflow用户

发布于 2019-12-06 01:59:24

如果小数部分是微秒,以0到6位之间的数字(高达999,999微秒)写入,那么您可以在格式化程序中指定ChronoFIeld.MICRO_OF_SECOND

代码语言:javascript
运行
复制
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());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59205539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档