gpt4 book ai didi

java - Android - 将日期转换为时间前,但它返回 48 年前

转载 作者:行者123 更新时间:2023-12-01 17:48:42 24 4
gpt4 key购买 nike

我正在尝试将日期转换为过去时间。返回的内容:1 小时前、1 个月前、2 个月前、1 年前。

这是一个从 WordPress 获取博客文章的 Android 应用程序。

但是,我当前的代码返回(对于每个帖子)48 年前

我试图在互联网上找到答案,是的,大多数答案都对我有帮助,但我的每一篇文章仍然是 48 年前的答案。

大多数答案都不适合我。

请注意,我没有使用 Java 8。很多答案都推荐 Java 8,但我无法使用它。

public String parseDateToddMMyyyy(String time) {
String inputPattern = "yyyy-MM-dd'T'HH:mm:ss";
String outputPattern = "yyyy-MM-dd HH:mm:ss'Z'";
SimpleDateFormat inputFormat = new SimpleDateFormat(inputPattern);
SimpleDateFormat outputFormat = new SimpleDateFormat(outputPattern);

inputFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
outputFormat.setTimeZone(TimeZone.getTimeZone("GMT"));

Date date = null;
String str = null;

try {
date = inputFormat.parse(time);
str = outputFormat.format(date);

long dateInMillinSecond = date.getTime();

str = toDuration(dateInMillinSecond);

Log.e("Blog - ", "Date " + date);
//output for the dare is Sat May 19 22:59:42 EDT 2018

Log.e("Blog - ", "Str " + str);
//output is 48 years ago

} catch (ParseException e) {
e.printStackTrace();
}
return str;
}

我还发现了这两种将毫秒转换为时间前的方法,我认为这两种方法可以找到。所以,我认为问题在于日期。日期格式未转换为毫秒(不确定)。

public static final List<Long> times = Arrays.asList(
TimeUnit.DAYS.toMillis(365),
TimeUnit.DAYS.toMillis(30),
TimeUnit.DAYS.toMillis(1),
TimeUnit.HOURS.toMillis(1),
TimeUnit.MINUTES.toMillis(1),
TimeUnit.SECONDS.toMillis(1));

public static final List<String> timesString =
Arrays.asList("year","month","day","hour","minute","second");

public static String toDuration(long duration) {
StringBuffer res = new StringBuffer();
for(int i=0;i< times.size(); i++) {
Long current = times.get(i);
long temp = duration/current;
if(temp>0) {
res.append(temp).append(" ").append(timesString.get(i))
.append(temp != 1 ? "s" : "").append(" ago");
break;
}
}
if("".equals(res.toString()))
return "0 seconds ago";
else
return res.toString();
}

编辑

变量long dateInMilliSecond返回1524430807000

最佳答案

我会看看你的代码,但我绝对应该说,48 年前 让我想起了 1970 年 1 月 1 日。可能你正在向 humanizer 函数发送 null 或 0 作为日期。

审核后编辑:

我认为问题在于,您计算的是日期的持续时间,而不是差异。如果您想计算真实的日期前,您应该将时间差发送到toDuration函数。

当前行为非常正常,因为您将 x-x-2018 日期发送到 toDuration 函数,它基本上返回 48 年前(从零开始)是 1970 年)。您应该发送差额。例如;

long difference = System.currentTimeMillis() - dateInMillisecond;
String humanizedDate = toDuration(difference);

关于java - Android - 将日期转换为时间前,但它返回 48 年前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52673156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com