Android 日期时间转换器
我有一个字符串中响应的时间戳,我试图将其转换为显示时间 然而,我的转换器有一个问题,它比当前时间晚了1小时,1天,等等 例如,当我在这里发布问题时,这个给定的时间戳Android 日期时间转换器,android,timestamp,Android,Timestamp,我有一个字符串中响应的时间戳,我试图将其转换为显示时间 然而,我的转换器有一个问题,它比当前时间晚了1小时,1天,等等 例如,当我在这里发布问题时,这个给定的时间戳1610959169显示的是18小时前的。事实上,我必须在线转换,它是19小时前在中给出结果的 请检查下面转换类的代码片段 object DateTimeConvertUtil { private val SECOND_MILLIS = 1000 private val MINUTE_MILLIS = 60 * SECOND_MILL
1610959169
显示的是18小时前的。事实上,我必须在线转换,它是19小时前在中给出结果的
请检查下面转换类的代码片段
object DateTimeConvertUtil {
private val SECOND_MILLIS = 1000
private val MINUTE_MILLIS = 60 * SECOND_MILLIS
private val HOUR_MILLIS = 60 * MINUTE_MILLIS
private val DAY_MILLIS = 24 * HOUR_MILLIS
private val WEEK_MILLIS = 7 * DAY_MILLIS
fun getCreatedTime(givenTime: Long, isShowingWeek: Boolean? = false): String? {
var time = givenTime
if (time < 1000000000000L) {
time *= 1000
}
val now = System.currentTimeMillis()
if (time > now || time <= 0) {
return null
}
val diff = now - time
when {
diff < MINUTE_MILLIS -> return "Just now"
diff < 2 * MINUTE_MILLIS -> return "a minute ago"
diff < 50 * MINUTE_MILLIS -> return "${diff / MINUTE_MILLIS} minutes ago"
diff < 90 * MINUTE_MILLIS -> return "an hour ago"
diff < 24 * HOUR_MILLIS -> return "${diff / HOUR_MILLIS} hours ago"
diff < 48 * HOUR_MILLIS -> return "Yesterday"
diff < 7 * DAY_MILLIS -> return "${diff / DAY_MILLIS} days ago"
else -> {
return if (isShowingWeek!!) {
when {
diff / WEEK_MILLIS <= 1 -> "${diff / WEEK_MILLIS} week ago"
diff / WEEK_MILLIS <= 52 -> "${diff / WEEK_MILLIS} weeks ago"
diff / WEEK_MILLIS <= 104 -> "a year ago"
else -> "2 years ago"
}
} else {
showDate(time.toString())
}
}
}
}
object DateTimeConvertUtil{
私有值秒=1000
私有值分钟=60*秒
私人val小时=60*分钟
私人val日=24*小时
私人val周=7*天
fun getCreatedTime(给定时间:长,isShowingWeek:布尔?=false):字符串{
变量时间=给定时间
如果(时间<10000000000L){
时间*=1000
}
val now=System.currentTimeMillis()
如果(时间>现在| |时间返回“刚才”
差异<2*分钟\u毫秒->返回“一分钟前”
diff<50*分钟\u毫秒->返回“${diff/MINUTE\u毫秒}分钟前”
差异<90*分钟->返回“一小时前”
差异<24*HOUR\u MILLIS->返回“${diff/HOUR\u MILLIS}小时前”
差异<48*小时\u毫秒->返回“昨天”
diff<7*天\u毫秒->返回“${diff/天\u毫秒}天前”
其他->{
如果返回(isShowingWeek!!){
什么时候{
差异/周数“${diff/周数}周前”
diff/周_-MILLIS“${diff/周_-MILLIS}周前”
“一年前”的差异/周
else->“2年前”
}
}否则{
showDate(time.toString())
}
}
}
}
请帮我解决这个问题。谢谢。以前使用过这个课程
public class TimeAgo {
public final static String monthAgo = " Month z";
public final static String monthsAgo = " Months ago";
public final static String weekAgo = " Week ago";
public final static String weeksAgo = " Weeks ago";
public final static String daysAgo = " Days ago";
public final static String dayAgo = " Day ago";
public final static String hourAgo = " Hour ago";
public final static String hoursAgo = " Hours ago";
public final static String minAgo = " Min ago";
public final static String minsAgo = " Mins ago";
public final static String secsAgo = " Secs ago";
public final static String secAgo = "Just Now";
static int second = 1000; // milliseconds
static int minute = 60;
static int hour = minute * 60;
static int day = hour * 24;
static int week = day * 7;
static int month = day * 30;
static int year = month * 12;
public static String DateDifference(long fromDate) {
long diff = 0;
long ms2 = System.currentTimeMillis();
// get difference in milli seconds
diff = ms2 - fromDate;
int diffInSec = Math.abs((int) (diff / (second)));
String difference = "";
if (diffInSec < minute) {
if (diffInSec <= 1) {
difference = secAgo;
} else {
difference = diffInSec + secsAgo;
}
} else if ((diffInSec / hour) < 1) {
if ((diffInSec / minute) <= 1) {
difference = (diffInSec / minute) + minAgo;
} else {
difference = (diffInSec / minute) + minsAgo;
}
} else if ((diffInSec / day) < 1) {
if ((diffInSec / hour) <= 1) {
difference = (diffInSec / hour) + hourAgo;
} else {
difference = (diffInSec / hour) + hoursAgo;
}
} else if ((diffInSec / week) < 1) {
if ((diffInSec / day) <= 1) {
difference = (diffInSec / day) + dayAgo;
} else {
difference = (diffInSec / day) + daysAgo;
}
} else if ((diffInSec / month) < 1) {
if ((diffInSec / week) <= 1) {
difference = (diffInSec / week) + weekAgo;
} else {
difference = (diffInSec / week) + weeksAgo;
}
} else if ((diffInSec / year) < 1) {
if ((diffInSec / month) <= 1) {
difference = (diffInSec / month) + monthAgo;
} else {
difference = (diffInSec / month) + monthsAgo;
}
} else {
// return date
Calendar c = Calendar.getInstance();
c.setTimeInMillis(fromDate);
SimpleDateFormat format_before = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
difference = format_before.format(c.getTime());
}
Log.e("time difference is: ", "" + difference);
return difference;
}
}
尝试更改以下内容:
diff < MINUTE_MILLIS -> return "Just now"
diff < 2 * MINUTE_MILLIS -> return "a minute ago"
diff < 50 * MINUTE_MILLIS -> return "${diff / MINUTE_MILLIS} minutes ago"
diff < 90 * MINUTE_MILLIS -> return "an hour ago"
diff < 24 * HOUR_MILLIS -> return "${diff / HOUR_MILLIS} hours ago"
diff返回“刚才”
差异<2*分钟\u毫秒->返回“一分钟前”
diff<50*分钟\u毫秒->返回“${diff/MINUTE\u毫秒}分钟前”
差异<90*分钟->返回“一小时前”
差异<24*HOUR\u MILLIS->返回“${diff/HOUR\u MILLIS}小时前”
与
diff返回“刚才”
差异<2*分钟\u毫秒->返回“一分钟前”
diff<60*分钟\u毫秒->返回“${diff/MINUTE\u毫秒}分钟前”
差异<24*HOUR\u MILLIS->返回“${diff/HOUR\u MILLIS}小时前”
您需要将50更改为60,并移除<90的复选框,它将正常工作。您也可以在此处参考:
val-date=date(timeStamp*1000)val-ago=DateUtils.getRelativeTimeSpanString(date.time,System.currentTimeMillis(),DateUtils.minutes_IN_MILLIS,DateUtils.FORMAT_ABBREV_ALL).toString()
试试看this@Raghunandan--你的建议很好。但是如果我们想显示实际的措辞,我们需要调整文本输出。无论如何,谢谢你的评论。祝你愉快。哦,对了,措辞不同这是一个极好的答案。此外,如果你能加上显示年份的内容,它可能比这门课所能展示的更完美w各种各样的时间安排。谢谢。是的,我肯定会继续等待看到你修改的代码来显示年份。
diff < MINUTE_MILLIS -> return "Just now"
diff < 2 * MINUTE_MILLIS -> return "a minute ago"
diff < 50 * MINUTE_MILLIS -> return "${diff / MINUTE_MILLIS} minutes ago"
diff < 90 * MINUTE_MILLIS -> return "an hour ago"
diff < 24 * HOUR_MILLIS -> return "${diff / HOUR_MILLIS} hours ago"
diff < MINUTE_MILLIS -> return "Just now"
diff < 2 * MINUTE_MILLIS -> return "a minute ago"
diff < 60 * MINUTE_MILLIS -> return "${diff / MINUTE_MILLIS} minutes ago"
diff < 24 * HOUR_MILLIS -> return "${diff / HOUR_MILLIS} hours ago"