Java 输入日期';社会';格式
我正在努力实现“社交”约会模式。我已经有了一个解决方案,但感觉应该有一个更好的解决方案。为什么是社会性的?我的意思是什么: 如果我们查看Facebook上帖子的时间戳,我们可以区分下一个选项:Java 输入日期';社会';格式,java,date,date-format,Java,Date,Date Format,我正在努力实现“社交”约会模式。我已经有了一个解决方案,但感觉应该有一个更好的解决方案。为什么是社会性的?我的意思是什么: 如果我们查看Facebook上帖子的时间戳,我们可以区分下一个选项: X秒前 十分钟前 X小时前 昨天上午11:07 星期五晚上9:36 5月5日下午5:00 2012年11月20日晚上9:05 为了更好地解释,我制作了下一个视觉时间线: 例如:如果当前时间为: 下午5:33,20秒星期三社交帖子发生在:周二上午00:00,周二下午5:33,20秒之间,那么日期格式应该是
例如:
如果当前时间为: 下午5:33,20秒星期三
社交帖子发生在:周二上午00:00,周二下午5:33,20秒之间,
那么日期格式应该是:昨天上午11:07 我的解决方案:
我检查每个选项(计数为7)并返回“社交”日期字符串 这就是我检查选项1的方式:
Date postDate = getPostDate();
Date nowDate = getNowDate();
// check passed seconds
int passedSeconds = getPassedSeconds(postDate, nowDate);
if (passedSeconds < 60)
{
return passedSeconds + " seconds ago";
}
// 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");
}
我以同样的方式检查其他选项
我在上述if语句中使用的一些方法:
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();
}
公共静态字符串getString(日期,字符串格式)
{
格式格式化程序=新的SimpleDataFormat(格式,Locale.US);
字符串s=格式化程序。格式(日期);
返回s;
}
/**
*例如:今天-1天
*
*@param日期
*@param numof天
*@返回
*/
公共静态日期getDateMinusDays(日期日期,整数numOfMinusDays)
{
日历=Calendar.getInstance();
日历。设置时间(日期);
calendar.add(calendar.DAY/u月,0-numf天);
返回calendar.getTime();
}
/**
*前一天早上00:00获取信息。
*意味着,如果通过日期=11月5日13:04,则返回日期将为11月4日00:00,天数=1
*
*@param日期
*@param days需要减少的天数
*@返回
*/
公共静态日期getZeroDayBeforeDays(日期日期,整数天)
{
日历昨天=Calendar.getInstance();
setTime(getDateMinusDays(date,days));
昨天。设置(Calendar.HOUR\u OF_DAY,0);
昨天。设置(日历。分钟,0);
昨天。设置(日历秒,0);
昨天。设置(日历。毫秒,1);
返回昨天。getTime();
}
最后,我的问题:
DateFormat
对象,但我不确定本地
集将字符串更改为合适的语言很抱歉问了这么长的问题,但我找不到更简短的方式来解释这个需求。
谢谢你,如果你不想再发明轮子的话,已经有一个实现的库了 请参见,使用本地化支持
PrettyTime p = new PrettyTime();
System.out.println(p.format(new Date()));
//prints: “right now”
System.out.println(p.format(new Date(1000*60*10)));
//prints: “10 minutes from now”
很有意思,好像就是我要找的。我要查一下这个图书馆。谢谢