当前位置: 首页 > 面试题库 >

如何在Java中将yyyy-MM-dd-HH.mm.ss.SSSSSS转换为yyyy-MM-dd'T'HH:mm:ss.SSSz?

陈哲
2023-03-14
问题内容

有人可以让我知道吗,如何在Java yyyy-MM-dd-HH.mm.ss.SSSSSS中将日期格式转换为日期, yyyy-MM- dd'T'HH:mm:ss.SSSz在输入和输出日期中都应为Strings。

我用过apache,DateFormatUtils但是在输出中没有毫秒数。


问题答案:

您还可以在Java 8中使用更新的Time
API
,类似…

String formatIn = "yyyy-MM-dd-HH.mm.ss.SSSSSS";
String formatOut = "yyyy-MM-dd'T'HH:mm:ss.SSSz";

String valueIn = "2016-01-19-09.55.00.000000";

LocalDateTime ldt = LocalDateTime.parse(valueIn, DateTimeFormatter.ofPattern(formatIn));
System.out.println("< " + ldt);

ZonedDateTime zdt = ZonedDateTime.of(ldt, ZoneId.systemDefault());        
String out = DateTimeFormatter.ofPattern(formatOut).format(zdt);
System.out.println("> " + out);

哪个输出…

< 2016-01-19T09:55
> 2016-01-19T09:55:00.000AEDT

这使您对管理时区负有更多责任,通常这可能是一个更好的解决方案

而且因为在Java 8 API中的时区之间进行转换使我很头疼(缺乏经验:P)

LocalDateTime ldt = LocalDateTime.parse(valueIn, DateTimeFormatter.ofPattern(formatIn));
System.out.println("< " + ldt);

ZonedDateTime here = ldt.atZone(ZoneId.systemDefault());
System.out.println("here " + here);

ZonedDateTime there = here.withZoneSameInstant(ZoneId.of("GMT"));
System.out.println("there " + there);
String out = DateTimeFormatter.ofPattern(formatOut).format(there);
System.out.println("> " + out);

哪个输出…

< 2016-01-19T09:55
here 2016-01-19T09:55+11:00[Australia/Sydney]
there 2016-01-18T22:55Z[GMT]
> 2016-01-18T22:55:00.000GMT

仅供参考:我认为您的输入使用的是纳秒/微秒,而不是毫秒(每秒只有1000毫秒)。
SimpleDateFormat不支持纳秒/微秒,但是DateTimeFormatter可以,例如,您必须使用该n模式yyyy- MM-dd-HH.mm.ss.nnnnnn

Java 7及以下

基本的答案是,使用SimpleDateFormat…。

String formatIn = "yyyy-MM-dd-HH.mm.ss.SSSSSS";
String formatOut = "yyyy-MM-dd'T'HH:mm:ss.SSSz";

String valueIn = "2016-01-19-09.55.00.000000";

SimpleDateFormat in = new SimpleDateFormat(formatIn);
SimpleDateFormat out = new SimpleDateFormat(formatOut);

Date dateIn = in.parse(valueIn);
System.out.println("< " + dateIn);

String valueOut = out.format(dateIn);
System.out.println("> " + valueOut);

哪个输出…

< Tue Jan 19 09:55:00 AEDT 2016
> 2016-01-19T09:55:00.000AEDT

这里的问题是,您可能会跨不同时区进行转换,在这种情况下,您可以使用类似…

in.setTimeZone(TimeZone.getTimeZone("GMT"));
dateIn = in.parse(valueIn);
System.out.println("< " + dateIn);

out.setTimeZone(TimeZone.getTimeZone("GMT"));
valueOut = out.format(dateIn);
System.out.println("> " + valueOut);

哪个输出

< Tue Jan 19 20:55:00 AEDT 2016
> 2016-01-19T09:55:00.000GMT

或两者的组合(如果您想隐蔽到其他时区)。

但是,就我个人而言,我会使用Joda-Time,但这就是我



 类似资料:
  • 我想将日期从07/02/2019转换为2019年7月07日。我的输入值是07/02/2019我想与目标值2019年7月07日进行比较.....请帮助我... public static void main(string[]args)引发ParseException{ 输出:Mon Jul 01 00:00:00 IST 2019这不是我的期望值

  • 问题内容: 我有一个格式。我希望它采用以下格式 以下是我尝试进行此转换的示例: 我得到的输出仍然不是格式。 请让我知道如何格式化从到 问题答案: 是自Unix纪元(1970年1月1日UTC:00:00)以来的毫秒数的容器。 它没有格式的概念。 输出…

  • 问题内容: 我希望将日期格式更改为MM / DD / YYYY,当前为YYYY / MM / DD。 我尝试进行研究,但具有讽刺意味的是,情况总是相反。现在有人可能会说将其向后尝试从那里开始尝试,但没有成功。 我上课的所有事情: 顺便说一下,我不熟悉的简单日期格式类和日期格式类,并且尝试实现它们均未成功。 问题答案: 只需使用即可转换为。无需麻烦的API。 而是在整个代码中使用此对象。每当您需要将

  • 问题内容: 我有一个日期列,其中日期格式为 在SQL Server中。有什么可能的方法来检索日期格式为 在选择语句中? 问题答案: 试试这个: 源链接 附录1: 如我的评论中所述,您需要先将字段转换为类型,然后才能执行上述操作。此示例应在您的SQL Server上运行: 如果出现此异常: 消息242,级别16,状态3,行1将varchar数据类型转换为datetime数据类型导致超出范围的值。 然

  • 问题内容: 我正在尝试从转换日期。我已经使用了mktime()函数和其他函数,但是我似乎无法使其工作。我已经成功地将原始日期用作定界符,但更改格式并将其与交换时没有成功。 任何帮助将不胜感激。 问题答案: 通过查看各个组成部分之间的分隔符,可以消除或格式中的日期的歧义:如果该分隔符是斜杠(),则假定为American ;否则,为0。反之,如果分隔符是破折号()或点(),则采用欧洲格式。 使用默认的

  • 我有一个格式为。我希望它的格式为 下面是我尝试进行此转换的示例util: 但是,我得到的输出不是格式。 请告诉我如何将从格式化为