Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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 无法将日期转换为纪元时间_Java_Datetime Format_Epoch - Fatal编程技术网

Java 无法将日期转换为纪元时间

Java 无法将日期转换为纪元时间,java,datetime-format,epoch,Java,Datetime Format,Epoch,这是我的示例代码 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.pa

这是我的示例代码

    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代码中昨天的日期和时间作为输入转换为历元。

您需要使用以下日期格式:

SimpleDateFormat df = new SimpleDateFormat("MMM dd yyyy hh:mm:ss.SSS a zzz",Locale.US);
对于AM/PM标记,使用“a”。为了

e、 g

输出:

1571918400000                                                                                                                                                                      
1571918399000
tl;博士 1571875200000

java.time 两个问题:

  • 因为,您使用的格式代码不正确
  • 您使用的是几年前被现代java.time类取代的糟糕的日期时间类
您的输入,为清晰起见重命名

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 );
显然,您想要的是自1970年第一个时刻的历元参考(UTC,1970-01-01T00:00Z)以来的毫秒计数。首先从每个
ZoneDateTime
提取构建块类
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 );
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

毫启动=1571875200000

milliStop=1571961599000



关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

该项目现已启动,建议迁移到类

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*

从哪里获得java.time类

  • 、和更高版本-标准Java API的一部分,带有捆绑实现。
    • Java9添加了一些次要功能和修复
    • 大多数java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类

    • 对于早期的Android(我刚刚运行了你的代码片段,一切都对我有用。现在请不要使用
      Date
      SimpleDateFormat
      类。它们已被更好的类所取代。查看和类。仅供参考,有严重缺陷的日期时间类,例如,
      java.text.SimpleDateFormat
      现在被类b取代内置于Java 8及更高版本中。快速查看显示,
      H
      大写表示“小时(0-23)”,而
      H
      小写表示“上午/下午(1-12)”的小时数您还应该使用值
      Locale.US
      将第二个参数添加到
      新SimpleDataFormat
      ,否则解析可能会失败,因为在大多数其他语言中,
      Oct
      将是一个未知的月份。24日午夜前1秒怎么可能是24日午夜前1秒?离午夜有23小时59分钟59秒(一天开始)到午夜前1秒(一天结束)。当我运行你的代码时,我得到
      1571875200000
      1571961599000
      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 );