Java - 取两个字符串并组合成一个日期对象
Java - Take two strings and combine into a single date object
我正在尝试获取两个字符串并将其放入 Date 对象中。我在尝试找出需要使用的格式时遇到问题。
第一个字符串是日期,格式为:1 月 5 日
第二个字符串是时间,格式为:8:15
主要问题是 5 号的格式是什么
由于您的日期字符串 5th Jan
没有年份,您将不得不使用一些默认年份,例如当前年份,您可以从 LocalDate.now()
获得。您可以使用 DateTimeFormatterBuilder#parseDefaulting
设置默认值。此外,您还可以使解析器
使用 DateTimeFormatterBuilder#parseCaseInsensitive
.
不区分大小写
为了解析日期字符串 5th Jan
,您可以使用模式 d'th' MMM
。但是,为了处理其他后缀,例如 3rd、1st 等,您应该使用模式 d['th']['st']['rd']['nd'] MMM
,其中方括号内的模式是可选的。
为了解析像 8:15
这样的时间字符串,您可以使用模式 H:m
.
演示:
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
LocalDate date = LocalDate.now();
DateTimeFormatter dtfForDate = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.parseDefaulting(ChronoField.YEAR, date.getYear())
.appendPattern("d['th']['st']['rd']['nd'] MMM")
.toFormatter(Locale.ENGLISH);
DateTimeFormatter dtfForTime = DateTimeFormatter.ofPattern("H:m", Locale.ENGLISH);
String strDate = "5th Jan";
String strTime = "8:15";
LocalDateTime ldt = LocalDate.parse(strDate, dtfForDate)
.atTime(LocalTime.parse(strTime, dtfForTime));
// Print the default string value i.e. the value returned by ldt.toString()
System.out.println(ldt);
// The default format omits seconds and fraction of second if they are 0. In
// order to retain them in the output string, you can use DateTimeFormatter
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss");
String formatted = dtf.format(ldt);
System.out.println(formatted);
}
}
输出:
2021-01-05T08:15
2021-01-05T08:15:00
了解现代日期时间 API
我正在尝试获取两个字符串并将其放入 Date 对象中。我在尝试找出需要使用的格式时遇到问题。
第一个字符串是日期,格式为:1 月 5 日
第二个字符串是时间,格式为:8:15
主要问题是 5 号的格式是什么
由于您的日期字符串 5th Jan
没有年份,您将不得不使用一些默认年份,例如当前年份,您可以从 LocalDate.now()
获得。您可以使用 DateTimeFormatterBuilder#parseDefaulting
设置默认值。此外,您还可以使解析器
使用 DateTimeFormatterBuilder#parseCaseInsensitive
.
为了解析日期字符串 5th Jan
,您可以使用模式 d'th' MMM
。但是,为了处理其他后缀,例如 3rd、1st 等,您应该使用模式 d['th']['st']['rd']['nd'] MMM
,其中方括号内的模式是可选的。
为了解析像 8:15
这样的时间字符串,您可以使用模式 H:m
.
演示:
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
LocalDate date = LocalDate.now();
DateTimeFormatter dtfForDate = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.parseDefaulting(ChronoField.YEAR, date.getYear())
.appendPattern("d['th']['st']['rd']['nd'] MMM")
.toFormatter(Locale.ENGLISH);
DateTimeFormatter dtfForTime = DateTimeFormatter.ofPattern("H:m", Locale.ENGLISH);
String strDate = "5th Jan";
String strTime = "8:15";
LocalDateTime ldt = LocalDate.parse(strDate, dtfForDate)
.atTime(LocalTime.parse(strTime, dtfForTime));
// Print the default string value i.e. the value returned by ldt.toString()
System.out.println(ldt);
// The default format omits seconds and fraction of second if they are 0. In
// order to retain them in the output string, you can use DateTimeFormatter
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss");
String formatted = dtf.format(ldt);
System.out.println(formatted);
}
}
输出:
2021-01-05T08:15
2021-01-05T08:15:00
了解现代日期时间 API