Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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_Android_Simpledateformat - Fatal编程技术网

Java 如何将当前字符串格式化为日期/时间格式?

Java 如何将当前字符串格式化为日期/时间格式?,java,android,simpledateformat,Java,Android,Simpledateformat,我正在尝试将此字符串转换为日期/时间格式 我从数据库中获取此字符串,只想将其转换为正确的日期和时间… 字符串str=2019-02-22T13:43:00Z//输入 我通过以下代码从此字符串中获取正确的日期: String[] split_date = date_time.split("T",2); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date date1 = format.parse ( spl

我正在尝试将此字符串转换为日期/时间格式
我从数据库中获取此字符串,只想将其转换为正确的日期和时间…
字符串str=2019-02-22T13:43:00Z//输入
我通过以下代码从此字符串中获取正确的日期:

 String[] split_date = date_time.split("T",2);
 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
 Date   date1  = format.parse ( split_date[0]);
 date_time = new SimpleDateFormat("dd-MMM-yyyy hh:mm", Locale.ENGLISH).format(date1);  
在上述代码中(日期时间=2019年2月22日12:00)即将到来。
预计产量为:2019年2月22日13:43
这里的问题是,我无法从默认格式中获取正确的时间。

请尝试以下代码:

String dt = "2019-02-22T13:43:00Z";
SimpleDateFormat mainformat = new SimpleDateFormat("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'", Locale.getDefault());
mainformat.setTimeZone(TimeZone.getTimeZone("UTC"));

try {
    Date date1 = mainformat.parse(dt);
    String date_time = new SimpleDateFormat("dd-MMM-yyyy HH:mm", Locale.ENGLISH).format(date1);
    Log.e("Date Time", date_time); 
} catch (Exception e) {
    e.printStackTrace();
}
输出:2019年2月22日13:43


现代方法使用java.time类

输出:

22-Feb-2019 13:43

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

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

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

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

Instant instant = Instant.parse( "2019-02-22T13:43:00Z" ) ;
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MMM-uuuu HH:mm" ) ;
String output = odt.format( f ) ;
从哪里获得java.time类

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

    • 对于早期的Android(你所说的正确日期是什么意思?如果你只想要这个“2019年2月22日”?为什么要在
      T
      上拆分?我会使用
      Instant.parse(日期时间)来查看解析
      ,然后格式化为所需的时区。然后,您可以使用所需的任何时区格式化为所需的输出。不要使用旧的java
      Date
      类。因为您拆分了
      t
      只取它的第一部分
      2019-02-22
      并使用
      dd MMM yyyy hh:mm
      格式化您添加的
      hh:mm
      。我看不到您在代码中给出了
      hh:mm
      。并避免使用过时的日期类使用LocalDate类。这些糟糕的类在几年前就被java.time类取代了。@BasilBourque,调用需要API级别26(当前最小值为19):java.time.Instant#parsed问题说明:“预期输出为:2019年2月22日13:43”(我的粗体)。您的解析不正确。
      Z
      是UTC偏移量,必须按UTC偏移量进行解析,否则您得到的时间不正确。大写
      HH
      给出的是13,而不是1。@SagarZala对于Java 6和7,请参阅Three Ten Backport库。对于早期的Android,请参阅Three TenABP库。调用需要API级别26(当前最小值为19):java.time.Instant#parsed不太正确,@SagarZala.java.time已被后端口。添加到您的项目并使用此答案中的代码。只需确保从
      org.threeten.bp
      @SagarZala导入java 6和7,请参阅threeten后端口库。对于早期的Android,请参阅ThreeTenABP库。当然。我会看到的。谢谢。