Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 输入日期';社会';格式_Java_Date_Date Format - Fatal编程技术网

Java 输入日期';社会';格式

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秒之间,那么日期格式应该是

我正在努力实现“社交”约会模式。我已经有了一个解决方案,但感觉应该有一个更好的解决方案。为什么是社会性的?我的意思是什么:

如果我们查看Facebook上帖子的时间戳,我们可以区分下一个选项:

  • X秒前
  • 十分钟前
  • X小时前
  • 昨天上午11:07
  • 星期五晚上9:36
  • 5月5日下午5:00
  • 2012年11月20日晚上9:05
  • 为了更好地解释,我制作了下一个视觉时间线:
    例如:
    如果当前时间为: 下午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
    对象,但我不确定

  • 如何本地化字符串,如'dayed''at',以便不同的
    本地
    集将字符串更改为合适的语言


  • 很抱歉问了这么长的问题,但我找不到更简短的方式来解释这个需求。

    谢谢你,如果你不想再发明轮子的话,已经有一个实现的库了

    请参见,使用本地化支持

    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”
    

    很有意思,好像就是我要找的。我要查一下这个图书馆。谢谢