Android 将日期/时间解析为localtimezone
我试图在bind viewholder中解析来自服务器端的日期/时间json。 试图解析的日期字符串am如下:Android 将日期/时间解析为localtimezone,android,try-catch,date,Android,Try Catch,Date,我试图在bind viewholder中解析来自服务器端的日期/时间json。 试图解析的日期字符串am如下: 2018-06-25T08:06:52Z 下面是我正在使用的代码(从另一个堆栈溢出线程获得) 但是,这不起作用,为文本视图设置的时间与解析之前相同 设置到文本视图的时间与解析之前相同 这是因为您没有传入新的SimpleDataFormat 试试这个: final String serverDate = "2018-06-25T08:06:52Z" final SimpleDateFo
2018-06-25T08:06:52Z
下面是我正在使用的代码(从另一个堆栈溢出线程获得)
但是,这不起作用,为文本视图设置的时间与解析之前相同
设置到文本视图的时间与解析之前相同
这是因为您没有传入新的SimpleDataFormat
试试这个:
final String serverDate = "2018-06-25T08:06:52Z"
final SimpleDateFormat serverDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
final SimpleDateFormat yourDateFormat = new SimpleDateFormat("yyyy-MM-dd"); // put whatever you want here!
try {
final Date date = serverDate.parse(serverDateFormat);
final String formattedDate = yourDateFormat.format(date);
} catch (ParseException e) {
System.out.println(e.toString());
}
这样,您就可以将服务器格式的
字符串
解释为一个纯日期
对象。然后,您可以自由地对该对象执行您想要的操作,并将其转换为您想要的格式(通过提供新格式)
有关构建日期格式模式的详细信息,请参见
设置到文本视图的时间与解析之前相同
这是因为您没有传入新的SimpleDataFormat
试试这个:
final String serverDate = "2018-06-25T08:06:52Z"
final SimpleDateFormat serverDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
final SimpleDateFormat yourDateFormat = new SimpleDateFormat("yyyy-MM-dd"); // put whatever you want here!
try {
final Date date = serverDate.parse(serverDateFormat);
final String formattedDate = yourDateFormat.format(date);
} catch (ParseException e) {
System.out.println(e.toString());
}
这样,您就可以将服务器格式的
字符串
解释为一个纯日期
对象。然后,您可以自由地对该对象执行您想要的操作,并将其转换为您想要的格式(通过提供新格式)
有关构建日期格式模式的详细信息,请参见
这张照片是:
内罗毕时间:11:06
我使用的是java.time
,在本例中是Java6和Java7的后端口。这个后端口在Android版本中也可用,您可以将其用于较低的Android API级别。我的进口是:
import org.threeten.bp.Instant;
import org.threeten.bp.LocalTime;
import org.threeten.bp.ZoneId;
import org.threeten.bp.temporal.ChronoUnit;
如果需要此格式的API的时间字符串,则可以。如果您正在为用户演示一个时间字符串,那么考虑使用java的内置格式代替:
DateTimeFormatter timeFormatter = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);
ZonedDateTime dateTime = inst.atZone(ZoneId.of("Africa/Nairobi"));
System.out.println("Formatted: " + dateTime.format(timeFormatter));
我试着在斯瓦希里语(sw_KE)语言环境中运行此程序,得到:
格式:上午11:06
显然,这个地区使用英语AM/PM方式记录时间(我在Kikuyu和Kalenjin地区得到了相同的结果)。在英国地区,我得到了与以前相同的格式:
格式:11:06
我正在使用和建议java.time
,这是一种现代的java日期和时间API。对于任何阅读和使用Java8或更高版本或为AndroidAPI级别26或更高版本编程的人,您不需要提到的backport。只需从java.time
导入带有子包的内置日期时间类,而不是上面提到的那些
你的代码出了什么问题?
错误来自将日期时间字符串中的Z
硬编码为文本。它的UTC偏移量为零,如果您不这样分析,则日期-时间字符串将在您的SimpleDataFormat
、非洲/内罗毕的时区中进行分析,这对于您的字符串是不正确的
不过,我想您根本不应该使用SimpleDateFormat
、时区
和日期
。这些类已经过时很久了,第一个类尤其麻烦。我总是使用java.time
另一个提示:不要接受例外。不要将您的catch
块留空。以某种明显的方式报告异常。这是您发现代码中出现错误的机会
链接
- 解释如何使用
java.time
- ,其中首先描述了
java.time
- ,java.time的后端口到Java6和Java7(JSR-310为三十)
- ,Android版Three Ten Backport
- ,解释得非常透彻
java.time
,在本例中是Java6和Java7的后端口。这个后端口在Android版本中也可用,您可以将其用于较低的Android API级别。我的进口是:
import org.threeten.bp.Instant;
import org.threeten.bp.LocalTime;
import org.threeten.bp.ZoneId;
import org.threeten.bp.temporal.ChronoUnit;
如果需要此格式的API的时间字符串,则可以。如果您正在为用户演示一个时间字符串,那么考虑使用java的内置格式代替:
DateTimeFormatter timeFormatter = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);
ZonedDateTime dateTime = inst.atZone(ZoneId.of("Africa/Nairobi"));
System.out.println("Formatted: " + dateTime.format(timeFormatter));
我试着在斯瓦希里语(sw_KE)语言环境中运行此程序,得到:
格式:上午11:06
显然,这个地区使用英语AM/PM方式记录时间(我在Kikuyu和Kalenjin地区得到了相同的结果)。在英国地区,我得到了与以前相同的格式:
格式:11:06
我正在使用和建议java.time
,这是一种现代的java日期和时间API。对于任何阅读和使用Java8或更高版本或为AndroidAPI级别26或更高版本编程的人,您不需要提到的backport。只需从java.time
导入带有子包的内置日期时间类,而不是上面提到的那些
你的代码出了什么问题?
错误来自将日期时间字符串中的Z
硬编码为文本。它的UTC偏移量为零,如果您不这样分析,则日期-时间字符串将在您的SimpleDataFormat
、非洲/内罗毕的时区中进行分析,这对于您的字符串是不正确的
不过,我想您根本不应该使用SimpleDateFormat
、时区
和日期
。这些类已经过时很久了,第一个类尤其麻烦。我总是使用java.time
另一个提示:不要接受例外。不要将您的catch
块留空。以某种明显的方式报告异常。这是您发现代码中出现错误的机会
链接
- 解释如何使用
java.time
- ,其中首先描述了
java.time
- ,java.time的后端口到Java6和Java7(JSR-310为三十)
- ,Android版Three Ten Backport
- ,解释得非常透彻
java.time.Instant
和相关类。为了填补以前的评论所说的阿诺尔达斯的评论,考虑扔掉。