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