Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 2020-12-16T16:27:57的日期格式解析异常;00:00_Java_Date_Datetime_Simpledateformat_Java Time - Fatal编程技术网

Java 2020-12-16T16:27:57的日期格式解析异常;00:00

Java 2020-12-16T16:27:57的日期格式解析异常;00:00,java,date,datetime,simpledateformat,java-time,Java,Date,Datetime,Simpledateformat,Java Time,我不确定日期是什么,但我很确定是yyyy-MM-dd'T'HH:MM:ssZZ:ZZ之类的。我在猜z是从哪里来的 正确的格式是什么?如何将其转换为ms 我也试过了 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss`ZZ:ZZ`"); sdf.parse("2020-12-16T16:27:57+00:00"); 我从minecraft j

我不确定日期是什么,但我很确定是yyyy-MM-dd'T'HH:MM:ss
ZZ:ZZ
之类的。我在猜z是从哪里来的

正确的格式是什么?如何将其转换为ms

我也试过了

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss`ZZ:ZZ`");
        sdf.parse("2020-12-16T16:27:57+00:00");
我从minecraft json文件中获取它。我拒绝使用joda时间,因为minecraft最初是用Java5编写的,没有使用joda时间来完成。它们后来更新为Java7

OffsetDateTime.parse(“2020-12-16T16:27:57+00:00”)
永远不要使用
SimpleDataFormat
或其他几年前被现代java.time类取代的糟糕的日期时间类

在解析/生成表示日期时间值的字符串时,java.time类默认使用标准格式。您的输入是这些标准格式之一。因此,无需指定格式化模式


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

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

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

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

从哪里获得java.time类

  • 、和更高版本-标准Java API的一部分,带有捆绑实现。
    • 带来了一些小功能和修复
    • 大多数java.time功能都在中向后移植到Java6和Java7
    • Android(26+)的更高版本捆绑了java.time类的实现
    • 对于早期的Android(
      OffsetDateTime.parse(“2020-12-16T16:27:57+00:00”)
      
      永远不要使用
      SimpleDataFormat
      或其他几年前被现代java.time类取代的糟糕的日期时间类

      默认情况下,java.time类在解析/生成表示日期时间值的字符串时使用标准格式。您的输入采用这些标准格式之一。因此无需指定格式模式


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

      要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为

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

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

      从哪里获得java.time类

      • 、和更高版本-标准Java API的一部分,带有捆绑实现。
        • 带来了一些小功能和修复
        • 大多数java.time功能都在中向后移植到Java6和Java7
        • Android(26+)的更高版本捆绑了java.time类的实现
        • 对于早期的Android(找到了答案

          Instant instant = Instant.parse("2020-12-16T16:27:57+00:00");
          
          算出

          Instant instant = Instant.parse("2020-12-16T16:27:57+00:00");
          
          java.time
          java.util
          的日期时间API及其格式化API
          SimpleDataFormat
          已过时且容易出错。建议完全停止使用它们并切换到

          • 无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7
          • 如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认
          使用现代日期时间API:

          import java.time.OffsetDateTime;
          import java.util.concurrent.TimeUnit;
          
          public class Main {
              public static void main(String[] args) {
                  String strDateTime = "2020-12-16T16:27:57+00:00";
                  OffsetDateTime odt = OffsetDateTime.parse(strDateTime);
                  System.out.println(odt);
                  System.out.println("No of milliseconds from Epoch: " + odt.toInstant().toEpochMilli());
                  // Alternatively
                  System.out.println("No of milliseconds from Epoch: " + TimeUnit.SECONDS.toMillis(odt.toEpochSecond()));
              }
          }
          
          2020-12-16T16:27:57Z
          No of milliseconds from Epoch: 1608136077000
          No of milliseconds from Epoch: 1608136077000
          
          import java.text.ParseException;
          import java.text.SimpleDateFormat;
          import java.time.Instant;
          import java.util.Date;
          import java.util.Locale;
          
          public class Main {
              public static void main(String[] args) throws ParseException {
                  String strDateTime = "2020-12-16T16:27:57+00:00";
                  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.ENGLISH);
                  Date date = sdf.parse(strDateTime);
                  System.out.println(date);
                  System.out.println("No of milliseconds from Epoch: " + date.getTime());
          
                  // Given below is how you can convert the legacy type, java.util.Date to the
                  // modern type java.time.Instant
                  Instant instant = date.toInstant();
                  System.out.println("No of milliseconds from Epoch: " + instant.toEpochMilli());
              }
          }
          
          由于日期时间字符串符合格式,您可以直接将其解析(即不使用
          DateTimeFormatter
          )到
          OffsetDateTime

               * parse them zula times. example: 2010-09-18T21:35:15.000Z
               */
              public static long parseZTime(String strTime) 
              {
                  return Instant.parse(strTime).toEpochMilli();
              }
              
              /**
               * parse the offset times. example: 2015-11-10T16:43:29-0500 and 2014-05-14T17:29:23+00:00
               */
              public static long parseOffsetTime(String strTime)
              {
                  return OffsetDateTime.parse(strTime).toInstant().toEpochMilli();
              }
          
          输出:

          import java.time.OffsetDateTime;
          import java.util.concurrent.TimeUnit;
          
          public class Main {
              public static void main(String[] args) {
                  String strDateTime = "2020-12-16T16:27:57+00:00";
                  OffsetDateTime odt = OffsetDateTime.parse(strDateTime);
                  System.out.println(odt);
                  System.out.println("No of milliseconds from Epoch: " + odt.toInstant().toEpochMilli());
                  // Alternatively
                  System.out.println("No of milliseconds from Epoch: " + TimeUnit.SECONDS.toMillis(odt.toEpochSecond()));
              }
          }
          
          2020-12-16T16:27:57Z
          No of milliseconds from Epoch: 1608136077000
          No of milliseconds from Epoch: 1608136077000
          
          import java.text.ParseException;
          import java.text.SimpleDateFormat;
          import java.time.Instant;
          import java.util.Date;
          import java.util.Locale;
          
          public class Main {
              public static void main(String[] args) throws ParseException {
                  String strDateTime = "2020-12-16T16:27:57+00:00";
                  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.ENGLISH);
                  Date date = sdf.parse(strDateTime);
                  System.out.println(date);
                  System.out.println("No of milliseconds from Epoch: " + date.getTime());
          
                  // Given below is how you can convert the legacy type, java.util.Date to the
                  // modern type java.time.Instant
                  Instant instant = date.toInstant();
                  System.out.println("No of milliseconds from Epoch: " + instant.toEpochMilli());
              }
          }
          
          你的答案出了什么问题?
        • 使用
          ZZ:ZZ
          而不是单个
          X
          检查以了解更多信息。此外,我不确定您是否在引号中包含了
          ZZ:ZZ
          ,用于格式化代码,只是为了将其作为代码突出显示,还是在实际代码中确实这样做了。请确保您从未在引号中包含
          Z
          单引号;否则,它将仅表示
          Z
          作为字符文字而不是时区。请检查以更好地理解它
        • 尽管此解析不是强制性的,但您不应该在没有
          区域设置的情况下使用
          SimpleDataFormat
          DateTimeFormatter
          。请检查以更好地理解它
        • 使用传统API:

          import java.time.OffsetDateTime;
          import java.util.concurrent.TimeUnit;
          
          public class Main {
              public static void main(String[] args) {
                  String strDateTime = "2020-12-16T16:27:57+00:00";
                  OffsetDateTime odt = OffsetDateTime.parse(strDateTime);
                  System.out.println(odt);
                  System.out.println("No of milliseconds from Epoch: " + odt.toInstant().toEpochMilli());
                  // Alternatively
                  System.out.println("No of milliseconds from Epoch: " + TimeUnit.SECONDS.toMillis(odt.toEpochSecond()));
              }
          }
          
          2020-12-16T16:27:57Z
          No of milliseconds from Epoch: 1608136077000
          No of milliseconds from Epoch: 1608136077000
          
          import java.text.ParseException;
          import java.text.SimpleDateFormat;
          import java.time.Instant;
          import java.util.Date;
          import java.util.Locale;
          
          public class Main {
              public static void main(String[] args) throws ParseException {
                  String strDateTime = "2020-12-16T16:27:57+00:00";
                  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.ENGLISH);
                  Date date = sdf.parse(strDateTime);
                  System.out.println(date);
                  System.out.println("No of milliseconds from Epoch: " + date.getTime());
          
                  // Given below is how you can convert the legacy type, java.util.Date to the
                  // modern type java.time.Instant
                  Instant instant = date.toInstant();
                  System.out.println("No of milliseconds from Epoch: " + instant.toEpochMilli());
              }
          }
          
          输出:

          import java.time.OffsetDateTime;
          import java.util.concurrent.TimeUnit;
          
          public class Main {
              public static void main(String[] args) {
                  String strDateTime = "2020-12-16T16:27:57+00:00";
                  OffsetDateTime odt = OffsetDateTime.parse(strDateTime);
                  System.out.println(odt);
                  System.out.println("No of milliseconds from Epoch: " + odt.toInstant().toEpochMilli());
                  // Alternatively
                  System.out.println("No of milliseconds from Epoch: " + TimeUnit.SECONDS.toMillis(odt.toEpochSecond()));
              }
          }
          
          2020-12-16T16:27:57Z
          No of milliseconds from Epoch: 1608136077000
          No of milliseconds from Epoch: 1608136077000
          
          import java.text.ParseException;
          import java.text.SimpleDateFormat;
          import java.time.Instant;
          import java.util.Date;
          import java.util.Locale;
          
          public class Main {
              public static void main(String[] args) throws ParseException {
                  String strDateTime = "2020-12-16T16:27:57+00:00";
                  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.ENGLISH);
                  Date date = sdf.parse(strDateTime);
                  System.out.println(date);
                  System.out.println("No of milliseconds from Epoch: " + date.getTime());
          
                  // Given below is how you can convert the legacy type, java.util.Date to the
                  // modern type java.time.Instant
                  Instant instant = date.toInstant();
                  System.out.println("No of milliseconds from Epoch: " + instant.toEpochMilli());
              }
          }
          
          请注意,
          java.util.Date
          对象不像;而是表示自称为“历元”的标准基准时间起的毫秒数,即
          1970年1月1日00:00:00 GMT
          (或UTC)。当您打印
          java.util.Date
          的对象时,其
          toString
          方法返回JVM时区中的日期时间,根据该毫秒值计算。如果您需要在不同的时区中打印日期时间,则需要将时区设置为
          SimpleDataFormat
          ,并从中获取格式化字符串

          java.time
          java.util
          的日期时间API及其格式化API
          SimpleDataFormat
          已过时且容易出错。建议完全停止使用它们并切换到

          • 无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7
          • 如果您正在为Android项目工作,并且您的Android API级别仍然不是complia