我只需要示例代码块或建议将以下日期字符串以格式转换为UTC时间yyyy-mm-dd hh:mm:ss?
样本日期字符串:11/23/2017 09:44 AM
有类似的问题,但我的测试数据是在AM/PM上。因此,请不要将其视为重复
您可以使用Java 8 time
软件包:
String input = "11/23/2017 09:44am";
String format = "MM/dd/yyyy hh:mma";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
LocalDateTime date = LocalDateTime.parse(input, formatter);
System.out.printf("%s%n", date);
,但问题是:由于小写'am'。
,这引发了DateTimeParseException
我在文档中抬起头来,但是我看不到一种标准方法来解析小写'am'或'pm',如Meridiem指示者 1 。您最终会手动替换它们:
input = input.replace("AM", "am").replace("PM","pm");
@olevv在评论中提到的,您可以使用 DateTimeFormatterBuilder
并指定解析应该对情况不敏感:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern(format)
.toFormatter();
然后,您可以将此格式化作为LocalDateTime.parse
方法的参数。
上述帖子的另一个答案提供了一个解决方案,您可以在其中覆盖AM/PM符号的小写型号。
1 有趣的是, SimpleDateFormat
dis 支持小写AM/pm的解析。
下面的示例代码应正确进行转换。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateConversion {
public static void main(String[] argv) {
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mma");
SimpleDateFormat OutputFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sampleDateString = "11/23/2017 09:44am";
try {
Date convertDate = formatter.parse(sampleDateString);
System.out.println(OutputFormatter.format(convertDate));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
这是声明要解析的日期字符串。
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy hh:mma");
和输出日期
SimpleDateFormat OutputFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
首先,您需要使用适当的模式创建一个SimpleDateFormat
。此课程可帮助您将字符串解析为java.util.Date
(更多信息在此处):
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy hh:mma");
如果您的原始字符串日期位于特殊时区中,则需要指示解析器使用此时区:
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy hh:mma", Locale.ENGLISH);
然后,您需要将字符串解析为日期:
Date d = sdf.parse("11/23/2017 09:44am");
finnaly您必须将时区的日期转换为UTC。
请找到Bellow完整代码段:
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy hh:mma", Locale.ENGLISH);
Date d = sdf.parse("11/23/2017 09:44am");
System.out.println(toUtcZonedDateTime(d));
}
public static ZonedDateTime toUtcZonedDateTime(final Date date) {
if (date == null) {
return null;
}
final ZoneId utcZone = ZoneOffset.UTC;
return ZonedDateTime.ofInstant(date.toInstant(), utcZone);
}
输出:
2017-11-23T08:44Z
SimpleDateFormat的Javadoc列出了所有选项,包括AM/PM标记的" A"。
在您的情况下,您需要:
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ssa")