Tôi đang cố gắng đạt được định dạng ngày ‘xã hội’ của chúng ta. Tôi đã có một giải pháp, nhưng nó cảm thấy giống như một giải pháp tốt hơn nên tồn tại. Tại sao xã hội và làm những gì tôi muốn nói:Ngày thành chuỗi theo định dạng 'xã hội'
Nếu chúng ta nhìn vào tem thời gian Facebook của bài viết chúng ta có thể phân biệt giữa các tùy chọn sau:
- X giây
- X phút trước
- X giờ trước
- Hôm qua lúc 11:07
- Thứ Sáu lúc 9:36
- ngày 5 tháng 5 lúc 5:00 chiều
- 20 Tháng 11 tại 9:05, 2012
tôi đã thực hiện thời gian hình ảnh tiếp theo cho lời giải thích tốt hơn:
Ví dụ:
Nếu thời gian hiện tại là: 17:33, 20 giây thứ tư
các bài xã hội đã xảy ra giữa: 12:00 Thứ ba < ->17:33, 20 giây thứ ba,
sau đó định dạng ngày nên được như thế : Hôm qua lúc 11:07 sáng.
Giải pháp Tôi có:
tôi kiểm tra mỗi tùy chọn (7 số) và trả lại chuỗi ngày 'xã hội'.
Đây là cách tôi kiểm tra cho tùy chọn 1:
Date postDate = getPostDate();
Date nowDate = getNowDate();
// check passed seconds
int passedSeconds = getPassedSeconds(postDate, nowDate);
if (passedSeconds < 60)
{
return passedSeconds + " seconds ago";
}
Đây là cách tôi kiểm tra cho tùy chọn 4:
// check yesterday
Date startYesterdayDate = getZeroDayBeforeDays(nowDate, 1);
int compare = compare(startYesterdayDate, postDate);
// if postDate comes after startYesterdayDate
if (compare == -1)
{
return "Yesterday at " + getString(postDate, "HH:mma");
}
tôi kiểm tra tùy chọn khác theo cách tương tự.
Một số phương pháp tôi sử dụng trong tôi nếu phát biểu trên:
public static String getString(Date date, String format)
{
Format formatter = new SimpleDateFormat(format, Locale.US);
String s = formatter.format(date);
return s;
}
/**
* For example: today - 1 day
*
* @param date
* @param numOfMinusDays
* @return
*/
public static Date getDateMinusDays(Date date, int numOfMinusDays)
{
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, (0 - numOfMinusDays));
return calendar.getTime();
}
/**
* Get the day before today at 00:00 am.<br>
* Means, if passed day = <b>Nov 5 13:04</b>, then returned date will be = <b>Nov 4 00:00</b> for days = 1
*
* @param date
* @param days Numner of days to reduce
* @return
*/
public static Date getZeroDayBeforeDays(Date date, int days)
{
Calendar yesterday = Calendar.getInstance();
yesterday.setTime(getDateMinusDays(date, days));
yesterday.set(Calendar.HOUR_OF_DAY, 0);
yesterday.set(Calendar.MINUTE, 0);
yesterday.set(Calendar.SECOND, 0);
yesterday.set(Calendar.MILLISECOND, 1);
return yesterday.getTime();
}
Cuối cùng, câu hỏi của tôi:
Có cách nào tốt hơn về chuyển đổi sự khác biệt giữa hai Ngày có định dạng chuỗi 'xã hội'? Như tôi đã nói, tôi cảm thấy rằng một số cách khác như có thể mở rộng đối tượng
DateFormat
có thể được sử dụng, nhưng tôi không chắc chắn.Làm thế nào để bản địa hoá các chuỗi như 'Hôm qua' và 'at', như vậy khác nhau
Local
bộ sẽ thay đổi chuỗi sang ngôn ngữ phù hợp?
Xin lỗi vì một câu hỏi dài như vậy, nhưng tôi không thể tìm được đường ngắn hơn để giải thích sự cần thiết.
Cảm ơn
Rất thú vị .., nó có vẻ như nó là những gì tôi tìm kiếm. Tôi sẽ kiểm tra thư viện này. Cảm ơn! – sromku
bạn được chào đón –