anh*_*Bui 26 time datetime android calendar
我的服务器.它的返回时间:
"2016-01-24T16:00:00.000Z"
Run Code Online (Sandbox Code Playgroud)
我想要
1:转换为String.
2:我希望它从服务器加载时显示"time ago".
请.帮我!
Men*_*ild 23
我主要看三种方式:
a)使用SimpleDateFormat和DateUtils的内置选项
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
long time = sdf.parse("2016-01-24T16:00:00.000Z").getTime();
long now = System.currentTimeMillis();
CharSequence ago =
DateUtils.getRelativeTimeSpanString(time, now, DateUtils.MINUTE_IN_MILLIS);
Run Code Online (Sandbox Code Playgroud)
b)外部库ocpsoft/PrettyTime(基于java.util.Date)
在这里,你必须使用SimpleDateFormat,也产生time-result作为解释"2016-01-24T16:00:00.000Z".
PrettyTime prettyTime = new PrettyTime(Locale.getDefault());
String ago = prettyTime.format(new Date(time));
Run Code Online (Sandbox Code Playgroud)
c)使用我的库Time4A(重量级但具有最佳的i18n支持)
Moment moment = Iso8601Format.EXTENDED_DATE_TIME_OFFSET.parse("2016-01-24T16:00:00.000Z");
String ago = PrettyTime.of(Locale.getDefault()).printRelativeInStdTimezone(moment);
Run Code Online (Sandbox Code Playgroud)
Asa*_*ssi 17
1 - 创建日期格式化程序:
public static final SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
Run Code Online (Sandbox Code Playgroud)
2 - 创建Date对象
String dateStr = "2016-01-24T16:00:00.000Z";
Date date = inputFormat.parse(dateStr);
Run Code Online (Sandbox Code Playgroud)
3 - 使用Android DateUtils创建一个漂亮的显示字符串:
String niceDateStr = DateUtils.getRelativeTimeSpanString(date.getTime() , Calendar.getInstance().getTimeInMillis(), DateUtils.MINUTE_IN_MILLIS);
Run Code Online (Sandbox Code Playgroud)
Däñ*_*rmà 13
这很简单.我会告诉你我的代码.
package com.example;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;
public class TimeShow
{
public static void main(String[] args) {
try
{
SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss");
Date past = format.parse("2016.02.05 AD at 23:59:30");
Date now = new Date();
long seconds=TimeUnit.MILLISECONDS.toSeconds(now.getTime() - past.getTime());
long minutes=TimeUnit.MILLISECONDS.toMinutes(now.getTime() - past.getTime());
long hours=TimeUnit.MILLISECONDS.toHours(now.getTime() - past.getTime());
long days=TimeUnit.MILLISECONDS.toDays(now.getTime() - past.getTime());
//
// System.out.println(TimeUnit.MILLISECONDS.toSeconds(now.getTime() - past.getTime()) + " milliseconds ago");
// System.out.println(TimeUnit.MILLISECONDS.toMinutes(now.getTime() - past.getTime()) + " minutes ago");
// System.out.println(TimeUnit.MILLISECONDS.toHours(now.getTime() - past.getTime()) + " hours ago");
// System.out.println(TimeUnit.MILLISECONDS.toDays(now.getTime() - past.getTime()) + " days ago");
if(seconds<60)
{
System.out.println(seconds+" seconds ago");
}
else if(minutes<60)
{
System.out.println(minutes+" minutes ago");
}
else if(hours<24)
{
System.out.println(hours+" hours ago");
}
else
{
System.out.println(days+" days ago");
}
}
catch (Exception j){
j.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
在Android中,您可以使用DateUtils.getRelativeTimeSpanString(long timeInMillis),参考https://developer.android.com/reference/android/text/format/DateUtils.html,您可以使用该方法的一种变体来提高准确性.
科特林版
private const val SECOND_MILLIS = 1000
private const val MINUTE_MILLIS = 60 * SECOND_MILLIS
private const val HOUR_MILLIS = 60 * MINUTE_MILLIS
private const val DAY_MILLIS = 24 * HOUR_MILLIS
private fun currentDate(): Date {
val calendar = Calendar.getInstance()
return calendar.time
}
fun getTimeAgo(date: Date): String {
var time = date.time
if (time < 1000000000000L) {
time *= 1000
}
val now = currentDate().time
if (time > now || time <= 0) {
return "in the future"
}
val diff = now - time
return when {
diff < MINUTE_MILLIS -> "moments ago"
diff < 2 * MINUTE_MILLIS -> "a minute ago"
diff < 60 * MINUTE_MILLIS -> "${diff / MINUTE_MILLIS} minutes ago"
diff < 2 * HOUR_MILLIS -> "an hour ago"
diff < 24 * HOUR_MILLIS -> "${diff / HOUR_MILLIS} hours ago"
diff < 48 * HOUR_MILLIS -> "yesterday"
else -> "${diff / DAY_MILLIS} days ago"
}
}
Run Code Online (Sandbox Code Playgroud)
最简单的方法
对于 Kotlin(时间以毫秒为单位)
private const val SECOND = 1
private const val MINUTE = 60 * SECOND
private const val HOUR = 60 * MINUTE
private const val DAY = 24 * HOUR
private const val MONTH = 30 * DAY
private const val YEAR = 12 * MONTH
private fun currentDate(): Long {
val calendar = Calendar.getInstance()
return calendar.timeInMillis
}
// Long: time in millisecond
fun Long.toTimeAgo(): String {
val time = this
val now = currentDate()
// convert back to second
val diff = (now - time) / 1000
return when {
diff < MINUTE -> "Just now"
diff < 2 * MINUTE -> "a minute ago"
diff < 60 * MINUTE -> "${diff / MINUTE} minutes ago"
diff < 2 * HOUR -> "an hour ago"
diff < 24 * HOUR -> "${diff / HOUR} hours ago"
diff < 2 * DAY -> "yesterday"
diff < 30 * DAY -> "${diff / DAY} days ago"
diff < 2 * MONTH -> "a month ago"
diff < 12 * MONTH -> "${diff / MONTH} months ago"
diff < 2 * YEAR -> "a year ago"
else -> "${diff / YEAR} years ago"
}
}
Run Code Online (Sandbox Code Playgroud)
使用@Excelso_Widi代码,我能够克服
我修改了他的代码,还翻译成英文。
public class TimeAgo2 {
public String covertTimeToText(String dataDate) {
String convTime = null;
String prefix = "";
String suffix = "Ago";
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date pasTime = dateFormat.parse(dataDate);
Date nowTime = new Date();
long dateDiff = nowTime.getTime() - pasTime.getTime();
long second = TimeUnit.MILLISECONDS.toSeconds(dateDiff);
long minute = TimeUnit.MILLISECONDS.toMinutes(dateDiff);
long hour = TimeUnit.MILLISECONDS.toHours(dateDiff);
long day = TimeUnit.MILLISECONDS.toDays(dateDiff);
if (second < 60) {
convTime = second+" Seconds "+suffix;
} else if (minute < 60) {
convTime = minute+" Minutes "+suffix;
} else if (hour < 24) {
convTime = hour+" Hours "+suffix;
} else if (day >= 7) {
if (day > 360) {
convTime = (day / 30) + " Years " + suffix;
} else if (day > 30) {
convTime = (day / 360) + " Months " + suffix;
} else {
convTime = (day / 7) + " Week " + suffix;
}
} else if (day < 7) {
convTime = day+" Days "+suffix;
}
} catch (ParseException e) {
e.printStackTrace();
Log.e("ConvTimeE", e.getMessage());
}
return convTime;
}
}
Run Code Online (Sandbox Code Playgroud)
我这样用
String time = jsonObject.getString("date_gmt");
TimeAgo2 timeAgo2 = new TimeAgo2();
String MyFinalValue = timeAgo2.covertTimeToText(time);
Run Code Online (Sandbox Code Playgroud)
快乐编码和感谢@Excelso_Widi你的人眼色
小智 5
private static final int SECOND_MILLIS = 1000;
private static final int MINUTE_MILLIS = 60 * SECOND_MILLIS;
private static final int HOUR_MILLIS = 60 * MINUTE_MILLIS;
private static final int DAY_MILLIS = 24 * HOUR_MILLIS;
private static Date currentDate() {
Calendar calendar = Calendar.getInstance();
return calendar.getTime();
}
public static String getTimeAgo(Date date) {
long time = date.getTime();
if (time < 1000000000000L) {
time *= 1000;
}
long now = currentDate().getTime();
if (time > now || time <= 0) {
return "in the future";
}
final long diff = now - time;
if (diff < MINUTE_MILLIS) {
return "moments ago";
} else if (diff < 2 * MINUTE_MILLIS) {
return "a minute ago";
} else if (diff < 60 * MINUTE_MILLIS) {
return diff / MINUTE_MILLIS + " minutes ago";
} else if (diff < 2 * HOUR_MILLIS) {
return "an hour ago";
} else if (diff < 24 * HOUR_MILLIS) {
return diff / HOUR_MILLIS + " hours ago";
} else if (diff < 48 * HOUR_MILLIS) {
return "yesterday";
} else {
return diff / DAY_MILLIS + " days ago";
}
}
Run Code Online (Sandbox Code Playgroud)
只需调用getTimeAgo(timeInDate);
它为我工作。
对于 kotlin,您可以使用此扩展功能。
fun Date.getTimeAgo(): String {
val calendar = Calendar.getInstance()
calendar.time = this
val year = calendar.get(Calendar.YEAR)
val month = calendar.get(Calendar.MONTH)
val day = calendar.get(Calendar.DAY_OF_MONTH)
val hour = calendar.get(Calendar.HOUR_OF_DAY)
val minute = calendar.get(Calendar.MINUTE)
val currentCalendar = Calendar.getInstance()
val currentYear = currentCalendar.get(Calendar.YEAR)
val currentMonth = currentCalendar.get(Calendar.MONTH)
val currentDay = currentCalendar.get(Calendar.DAY_OF_MONTH)
val currentHour = currentCalendar.get(Calendar.HOUR_OF_DAY)
val currentMinute = currentCalendar.get(Calendar.MINUTE)
return if (year < currentYear ) {
val interval = currentYear - year
if (interval == 1) "$interval year ago" else "$interval years ago"
} else if (month < currentMonth) {
val interval = currentMonth - month
if (interval == 1) "$interval month ago" else "$interval months ago"
} else if (day < currentDay) {
val interval = currentDay - day
if (interval == 1) "$interval day ago" else "$interval days ago"
} else if (hour < currentHour) {
val interval = currentHour - hour
if (interval == 1) "$interval hour ago" else "$interval hours ago"
} else if (minute < currentMinute) {
val interval = currentMinute - minute
if (interval == 1) "$interval minute ago" else "$interval minutes ago"
} else {
"a moment ago"
}
}
// To use it
val timeAgo = someDate.getTimeAgo()
Run Code Online (Sandbox Code Playgroud)
您尝试转换的是ISO 8601兼容格式。最简单的转换方法是使用Android 版Joda-Time 库。
将其添加到项目后,您可以使用此代码来提取确切的日期!
DateTimeZone timeZone = DateTimeZone.getDefault();
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd MMMM yyyy").withZone(timeZone);
DateTime dateTime2 = new DateTime( isoDateToBeConverted, timeZone );
String output = formatter.print( dateTime2 );
Log.w("TIME IF WORKS::",""+output);
Run Code Online (Sandbox Code Playgroud)
另外,请参阅此内容以您喜欢的方式格式化日期希望它有帮助!
| 归档时间: |
|
| 查看次数: |
25031 次 |
| 最近记录: |