将给定日期转换为UTC日期时间

时间:2017-01-19 19:04:00

标签: java

如何将指定日期转换为UTC开始日期时间和结束日期时间。

String date = "2017-01-01"
//Needed startDate as 2017-01-01T00:00:00Z
//and end date as 2017-01-01T23:59:59Z

2 个答案:

答案 0 :(得分:0)

这取决于你的java版本,并且一如既往有很多方法可以解决这个问题。使用java 8,您可以执行以下操作:

首先,您需要将日期解析为java.time.LocalDate

String date = "2017-01-01";
final LocalDate localDate = LocalDate.parse(date);
System.out.println(localDate);

打印

2017-01-01

通过此LocalDate,您可以将UTC开始日期和结束日期创建为java.time.ZonedDateTime的类型,如下所示

final ZoneId utc = ZoneId.of("UTC");
final ZonedDateTime start = LocalDate.parse(date).atStartOfDay(utc);
final ZonedDateTime end = LocalDate.parse(date).atTime(23, 59, 59).atZone(utc);
System.out.println(end); 

打印

2017-01-01T00:00Z[UTC]
2017-01-01T23:59:59Z[UTC]

关于你也可以做的结束日期的通知

final ZoneId utc = ZoneId.of("UTC");
final ZonedDateTime end = LocalDate.parse(date).atTime(LocalTime.MAX).atZone(utc);

这会为您提供更多数字

2017-01-01T23:59:59.999999999Z[UTC]

另见

https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html https://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html

希望它有所帮助!

答案 1 :(得分:0)

使用Java 8功能实际回答了这个问题。但是如果你像我一样并且坐在旧版本的Java上,即使它不像其他解决方案那样优雅,以下内容也可能达到目的:

    String dateString = "2017-01-01"; 
    final SimpleDateFormat sdfInput = new SimpleDateFormat("yyyy-MM-dd");
    // we need Calendar to manipulate date components
    Calendar cal = new GregorianCalendar();
    cal.setTime(sdfInput.parse(dateString));

    final SimpleDateFormat sdfOutput = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
    String startDate = sdfOutput.format(cal.getTime());

    cal.set(Calendar.HOUR, 23);
    cal.set(Calendar.MINUTE, 59);
    cal.set(Calendar.SECOND, 59);
    String endDateString = sdfOutput.format(cal.getTime());

    System.out.println(startDate);
    System.out.println(endDateString);

输出:

  

2017-01-01T00:00:00Z

     

2017-01-01T23:59:59Z