使用java将自定义日期字符串(使用am / pm)转换为UTC Date Time

时间:2017-11-24 06:42:50

标签: java string date selenium-webdriver utc

我只需要示例代码块或建议将以下日期字符串转换为格式时间格式为yyyy-MM-dd HH:mm:ss?

样本日期字符串:11/23/2017 09:44 am

有类似的问题但我的测试数据是am / pm.So请不要认为这是重复的

4 个答案:

答案 0 :(得分:2)

您可以使用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

我在文档中查了一下,但是我看不到像meridiem指示符 1 那样解析小写'am'或'pm'的标准方法。 <击> You'll end up manually replacing them

<击>
input = input.replace("AM", "am").replace("PM","pm");

<击>

如@OleVV在评论中所提到的,您可以使用DateTimeFormatterBuilder并指定解析应该不区分大小写:

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .parseCaseInsensitive()
    .appendPattern(format)
    .toFormatter();

然后您可以使用此格式化程序作为LocalDateTime.parse方法的参数。

上述帖子provides a solution的另一个答案,您可以使用小写变体覆盖AM / PM符号。

1 有趣的是,SimpleDateFormat 支持解析小写的上午/下午。

答案 1 :(得分:0)

SimpleDateFormat's javadoc列出了所有选项,包括am / pm标记的“a”。

在您的情况下,您需要:

SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ssa")

答案 2 :(得分:0)

下面的示例代码应该正确进行转换。

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");

答案 3 :(得分:0)

首先,您需要使用正确的模式创建Audiosource.MIC。此类可帮助您将字符串解析为SimpleDateFormatmore info here):

java.util.Date

如果您的原始字符串日期位于特殊时区,那么您需要指示解析器使用此时区:

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy hh:mma");

然后你需要解析字符串到日期:

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy hh:mma", Locale.ENGLISH);

Finnaly你必须将timezoned日期转换为UTC。

请在下面的完整代码段中找到:

Date d = sdf.parse("11/23/2017 09:44am");

输出:

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);
}