此问题已经在这里有了答案:
这是我的示例代码
String dt = "Oct 24 2019 12:00:00.000 AM UTC";
String dt1="Oct 24 2019 11:59:59.000 PM UTC";
SimpleDateFormat df = new SimpleDateFormat("MMM dd yyyy HH:mm:ss.SSS
aa zzz");
Date date = df.parse(dt);
Date date1 = df.parse(dt1);
long epoch = date.getTime();
long epoch1 = date1.getTime();
System.out.println(epoch);
System.out.println(epoch1);
此处指定了AM和PM,但未采用该值,并抛出了异常,
{"error_code":"INVALID_PARAMETER_VALUE","message":"Time range must have a start time earlier than the end time"}
如何在Java代码中指定AM / PM。如何使用Java代码中今天的昨天日期和时间作为转换为纪元的输入。
ZonedDateTime
.parse(
"Oct 24 2019 12:00:00.000 AM UTC" ,
DateTimeFormatter.ofPattern( "MMM d uuuu hh:mm:ss.SSS a z" ).withLocale( Locale.US )
)
.toInstant()
.toEpochMilli()
1571875200000
两个问题:
String inputStart = "Oct 24 2019 12:00:00.000 AM UTC";
String inputStop = "Oct 24 2019 11:59:59.000 PM UTC";
定义格式以匹配您的输入。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMM d uuuu hh:mm:ss.SSS a z" ).withLocale( Locale.US );
解析输入。
ZonedDateTime zdtStart = ZonedDateTime.parse( inputStart , f ); ZonedDateTime zdtStop = ZonedDateTime.parse( inputStop , f );
计算经过的时间。我们应该在不到24小时的时间内得到一秒钟的时间。
Duration d = Duration.between( zdtStart , zdtStop );
显然,您希望获得自UTC 1970-01-01T00:00Z的1970年第一时刻的纪元参考以来的毫秒数。首先从每个类的解析时间为纳秒。因此,要求毫秒可能会导致数据丢失,而忽略任何微秒或纳秒。Instant
中提取构建模块类ZonedDateTime
。Instant
代表UTC的时刻。此类可让您查询自纪元以来的计数。请注意,java.time
Instant start = zdtStart.toInstant() ;
Instant stop = zdtStop.toInstant() ;
long millisStart = start.toEpochMilli() ;
long milliStop = stop.toEpochMilli() ;
转储到控制台。
System.out.println( "zdtStart = " + zdtStart ); System.out.println( "zdtStop = " + zdtStop ); System.out.println( "d = " + d ); System.out.println( "start = " + start ); System.out.println( "stop = " + stop ); System.out.println( "millisStart = " + millisStart ); System.out.println( "milliStop = " + milliStop );
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如zdtStart = 2019-10-24T00:00Z [UTC]zdtStop = 2019-10-24T23:59:59Z [UTC]
d = PT23H59M59S
开始= 2019-10-24T00:00:00Z
停止= 2019-10-24T23:59:59Z
millisStart = 1571875200000
milliStop = 1571961599000
关于java.time
java.util.Date
,java.util.Date
和Calendar
。要了解更多信息,请参见Calendar
。并在Stack Overflow中搜索许多示例和说明。规格为SimpleDateFormat
。
SimpleDateFormat
项目现在位于Oracle Tutorial中,建议迁移到JSR 310类。
您可以直接与数据库交换
java.time
对象。使用兼容Joda-Time或更高版本的maintenance mode。不需要字符串,不需要java.time类。从哪里获取java.time类?java.sql.*
,Java SE 8和更高版本-具有捆绑实现的标准Java API的一部分。Interval
。