Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java日期时间格式AM/PM配置_Java_Simpledateformat - Fatal编程技术网

Java日期时间格式AM/PM配置

Java日期时间格式AM/PM配置,java,simpledateformat,Java,Simpledateformat,我在格式化日期时遇到一些问题: 日期:11/06/2020 04:14:20 日期格式:dd/MM/yyyy hh:MM:ss a 例外情况: java.text.ParseException:无法解析的日期:“11/06/2020 04:14:20” 下面是代码 Blockquote Blockquote 任何帮助都会非常有用。为日期和时间使用适当的日期时间对象 在绝大多数情况下,不应将日期和时间保存在字符串中,也不应将日期和时间从一种格式的字符串转换为另一种格式的字符串。将日期和时间保存在Z

我在格式化日期时遇到一些问题:

日期:11/06/2020 04:14:20

日期格式:dd/MM/yyyy hh:MM:ss a

例外情况:

java.text.ParseException:无法解析的日期:“11/06/2020 04:14:20”

下面是代码

Blockquote

Blockquote

任何帮助都会非常有用。

为日期和时间使用适当的日期时间对象 在绝大多数情况下,不应将日期和时间保存在字符串中,也不应将日期和时间从一种格式的字符串转换为另一种格式的字符串。将日期和时间保存在
ZonedDateTime
LocalDateTime
对象中

当需要接受字符串输入时,立即将该输入解析为日期时间对象。我正在使用并推荐java.time,这是现代java日期和时间API:

    DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("dd/MM/uuuu HH:mm:ss");
    String input = "11/06/2020 04:14:20";
    LocalDateTime dateTime = LocalDateTime.parse(input, inputFormatter);
    System.out.println(dateTime);
到目前为止的产出是:

2020-06-11T04:14:20

由于您的字符串中没有AM或PM,我假设04:14:20是从00:00:00到23:59:59的时间。如果你不打算这样做,你需要解释一下怎么做

仅当需要提供字符串输出时,才将日期和时间重新格式化为适当格式的字符串:

    DateTimeFormatter outputFormatter = DateTimeFormatter
            .ofPattern("MMMM dd, yyyy hh:mm:ss a", Locale.ENGLISH);
    String output = dateTime.format(outputFormatter);
    System.out.println(output);
2020年6月11日04:14:20上午

请为格式化程序提供区域设置,以便Java知道月份名称和AM/PM指示器使用哪种语言

你的代码出了什么问题? 您的字符串没有AM和PM:
11/06/2020 04:14:20
。然而,格式模式字符串最后需要一个AM/PM标记。这就是格式模式字母
a
的含义。所以你的字符串不是你需要的格式。这就是您观察到的异常的原因

链接
解释如何使用java.time。

您可以检查这段代码,您还必须将日期字符串值传递给am/pm部分,因为您的格式需要这样做

//String date = "11/06/2020 04:14:20";
String date = "11/06/2020 04:14:20 am";
DateFormat df = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a");

谢谢大家的帮助:

我已将源日期“11/06/2020 04:14:20”更改为“06/11/2020 04:14:20 PM”,然后在执行以下步骤后,它对我有效:

大宗报价

大宗报价


共享您的代码日期是否为字符串?是的,此日期为字符串我建议您不要使用
SimpleDateFormat
date
。这些类设计得很糟糕,而且早已过时,其中前者尤其令人讨厌。改为使用
LocalDateTime
DateTimeFormatter
,这两种格式都来自@OleV.V。尽管如此,许多人使用日期,知道它已经过时了
//String date = "11/06/2020 04:14:20";
String date = "11/06/2020 04:14:20 am";
DateFormat df = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a");
DateFormat inputFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a");
inputFormat.setTimeZone( TimeZone.getTimeZone("UTC") );                                     
Date dDate = inputFormat.parse( srcDate );                      
String strDeDate = formatDateToString( dDate, "dd/MM/yyyy hh:mm:ss a", "IST" );


public String formatDateToString(Date date, String format,String timeZone) {


    if (date == null) return null;

    SimpleDateFormat sdf = new SimpleDateFormat(format);

    if (timeZone == null || "".equalsIgnoreCase(timeZone.trim())) {
        timeZone = Calendar.getInstance().getTimeZone().getID();
    }

    sdf.setTimeZone(TimeZone.getTimeZone(timeZone));

    return sdf.format(date);
}