【问题标题】:How to combine String date and String time into a single Instant datetime using Java? [duplicate]如何使用 Java 将字符串日期和字符串时间组合成一个即时日期时间? [复制]
【发布时间】:2020-02-05 09:54:43
【问题描述】:

我想将 String date("19801115") 和 String time("1530") 组合成一个 Instant datetime。

例如: 有两个字符串变量:

String applicationDate = "19801115";
String applicationTime = "1530";

并将它们组合成applicationDateTime(即时类型,例如:“1980-11-15T15:30:00Z”)。 我该如何做到这一点?谢谢。

【问题讨论】:

  • 如果不向我们展示一些代码来告诉我们这两个对象是如何表示的(它们是字符串吗?java.util.date?java.time 对象?),实际上是不可能回答的。跨度>
  • @OHGODSPIDERS,对不起,感谢您的反馈,我会让我的问题更清楚。
  • 这些都不是“即时”;看起来您有一个 LocalDateLocalTime,它们需要一个可转换为即时的时区。

标签: java datetime


【解决方案1】:
String dateString = "19801115";
String timeString = "1530";

Date date = null;
try {
    date = new SimpleDateFormat("yyyyMMddhhmm").parse(dateString + timeString);
} catch (ParseException e) {
    e.printStackTrace();
}
Instant reqInstant = date.toInstant();
System.out.println(reqInstant); // time here depends on your local settings, may differ from 15:30

// this way you adjust an Instant to a time zone you need
ZonedDateTime zdt = ZonedDateTime.ofInstant(reqInstant, ZoneId.systemDefault() /*<- needed time zone here*/);
System.out.println(zdt.toInstant()/*returns an Instant*/);

此外,与DateTimeFormatter 类似的功能:

    String dateString = "19801115";
    String timeString = "1530";

    DateTimeFormatter dtf = new DateTimeFormatterBuilder()
            .appendPattern("yyyyMMddHHmm")
            .toFormatter()
            .withZone(ZoneId.systemDefault() /*<- needed time zone here*/);
    ZonedDateTime zdtOriginal = ZonedDateTime.parse(dateString + timeString, dtf);

    System.out.println(zdtOriginal.toInstant()/*returns an Instant*/);

    // this way you adjust an Instant to a time zone you need
    ZonedDateTime zdt = zdtOriginal.withZoneSameLocal(ZoneId.of("GMT") /*<- needed time zone here*/);
    System.out.println(zdt.toInstant()/*returns an Instant*/);

【讨论】:

  • 或许DateTimeFormatter类在这里更合适,而不是SimpleDateFormat类?
  • 请不要教年轻人使用早已过时且臭名昭著的SimpleDateFormat类。至少不是第一选择。而且不是没有任何保留。今天我们在java.time, the modern Java date and time API, 和它的DateTimeFormatter 中做得更好。
  • DateTimeFormatter添加了代码sn-p
猜你喜欢
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多