当前位置: 首页 > news >正文

搭建网站源码网站备案主体信息变更

搭建网站源码,网站备案主体信息变更,江西做网站建设,动漫网站logo本文为原创分享#xff0c;转载请注明出处。1、引言即时通讯IM应用中的聊天消息时间显示是个再常见不过的需求#xff0c;现在都讲究用户体验#xff0c;所以时间显示再也不能像传统软件一样简单粗地暴显示成“年/月/日 时:分:秒”这样。所以#xff0c;市面上几乎所有的IM…本文为原创分享转载请注明出处。1、引言即时通讯IM应用中的聊天消息时间显示是个再常见不过的需求现在都讲究用户体验所以时间显示再也不能像传统软件一样简单粗地暴显示成“年/月/日 时:分:秒”这样。所以市面上几乎所有的IM都会对聊天消息的时间显示格化做人性化处理从而提升用户体验(使用感受会明显友好)。这两天正在继续开发RainbowChat-Web产品所以正需要这样的代码。但经过在即时通讯网的论坛和技术交流群里询问以及网上的所谓仿微信例子都不符合要求。这些例子要么简陋粗暴(有逻辑bug硬伤)、要么并不完整(可能只是随手写的练手代码并不适合放到产品中)所以本着做技术精益求精的态度没有现成的轮子可用那就只能造轮子了。那么按怎样的显示逻辑来实现呢作为移动端IM的王者微信无疑处处是标杆所以本次的消息时间显示格式直接参照微信的实现逻辑准没错(随大流虽然没个性但不至于非主流)。* 提示本文中的代码实现是从 RainbowChat 和 RainbowChat-Web 两个IM产品中扒出来简化后的结果是基于完全相同的算法逻辑分别用OC、Java和JavaScript实现的。如您觉得有用可以改改直接用于您的产品如您有更好的建议请直接回复和评论。代码仅供参考不足之外还请见谅学习交流- 即时通讯/推送技术开发交流4群101279154 [推荐]- 移动端IM开发入门文章《新手入门一篇就够从零开发移动端IM》2、相关文章3、看看微信中聊天消息的时间显示规则先来看看微信中聊天消息的时间显示成什么样微信主页“消息”界面聊天界面(注意聊天界面中默认带了“时:分”的显示)来自微信官方对聊天消息时间显示的规则说明▲ 该规则的定义主要是2、3条(本图引用自微信官方FAQ文档)4、总结一下微信中聊天消息的时间显示逻辑参见第3节中的截图和微信官方的说明我们可以总结出微信对于聊天消息时间显示的规则。① 微信对于聊天消息时间显示的规则总结如下(首页“消息”界面)1)当聊天消息时间为一周之内时当天的消息显示为“小时:分钟”形式然后是“昨天”、“前天”然后就是“星期几”这个样子2)当聊天消息的时间大于一周时直接显示“年/月/日”的时间格式。② 微信对于聊天消息时间显示的规则总结如下(聊天内容界面)1)当聊天消息时间为一周之内时当天的消息显示为“小时:分钟”形式然后是“昨天 时:分”、“前天 时:分”然后就是“星期几 时:分”这个样子2)当聊天消息的时间大于一周时直接显示“年/月/日 时:分”的完整时间格式。注意聊天内容界面里的时间格式实际上是首页“消息”界面里的时间格式加上“时:分”后的结果所以代码实现上这两套代码是可以重用的无需两份代码。好了规则已经摸清下面将直接上代码。5、Android平台上的代码实现(标准Java)5.1 完整源码/*** 返回指定pattern样的日期时间字符串。** param dt* param pattern* return 如果时间转换成功则返回结果否则返回空字符串* author 即时通讯网([urlhttp://www.52im.net]http://www.52im.net[/url])*/publicstaticString getTimeString(Date dt, String pattern){try{SimpleDateFormat sdf newSimpleDateFormat(pattern);//yyyy-MM-dd HH:mm:sssdf.setTimeZone(TimeZone.getDefault());returnsdf.format(dt);}catch(Exception e){return;}}/*** 仿照微信中的消息时间显示逻辑将时间戳(单位毫秒)转换为友好的显示格式.* * 1)7天之内的日期显示逻辑是今天、昨天(-1d)、前天(-2d)、星期(只显示总计7天之内的星期数即-4d)* 2)7天之外(即7天)的逻辑直接显示完整日期时间。** param srcDate 要处理的源日期时间对象* param mustIncludeTime true表示输出的格式里一定会包含“时间:分钟”否则不包含(参考微信不包含时分的情况用于首页“消息”中显示时)* return 输出格式形如“10:30”、“昨天 12:04”、“前天 20:51”、“星期二”、“2019/2/21 12:09”等形式* author 即时通讯网([urlhttp://www.52im.net]http://www.52im.net[/url])* since 4.5*/publicstaticString getTimeStringAutoShort2(Date srcDate, booleanmustIncludeTime){String ret ;try{GregorianCalendar gcCurrent newGregorianCalendar();gcCurrent.setTime(newDate());intcurrentYear gcCurrent.get(GregorianCalendar.YEAR);intcurrentMonth gcCurrent.get(GregorianCalendar.MONTH)1;intcurrentDay gcCurrent.get(GregorianCalendar.DAY_OF_MONTH);GregorianCalendar gcSrc newGregorianCalendar();gcSrc.setTime(srcDate);intsrcYear gcSrc.get(GregorianCalendar.YEAR);intsrcMonth gcSrc.get(GregorianCalendar.MONTH)1;intsrcDay gcSrc.get(GregorianCalendar.DAY_OF_MONTH);// 要额外显示的时间分钟String timeExtraStr (mustIncludeTime? getTimeString(srcDate, HH:mm):);// 当年if(currentYear srcYear){longcurrentTimestamp gcCurrent.getTimeInMillis();longsrcTimestamp gcSrc.getTimeInMillis();// 相差时间(单位毫秒)longdelta (currentTimestamp - srcTimestamp);// 当天(月份和日期一致才是)if(currentMonth srcMonth currentDay srcDay){// 时间相差60秒以内if(delta 60* 1000)ret 刚刚;// 否则当天其它时间段的直接显示“时:分”的形式elseret getTimeString(srcDate, HH:mm);}// 当年 当天之外的时间(即昨天及以前的时间)else{// 昨天(以“现在”的时候为基准-1天)GregorianCalendar yesterdayDate newGregorianCalendar();yesterdayDate.add(GregorianCalendar.DAY_OF_MONTH, -1);// 前天(以“现在”的时候为基准-2天)GregorianCalendar beforeYesterdayDate newGregorianCalendar();beforeYesterdayDate.add(GregorianCalendar.DAY_OF_MONTH, -2);// 用目标日期的“月”和“天”跟上方计算出来的“昨天”进行比较是最为准确的(如果用时间戳差值// 的形式是不准确的比如现在时刻是2019年02月22日1:00、而srcDate是2019年02月21日23:00// 这两者间只相差2小时直接用“delta/(3600 * 1000)” 24小时来判断是否昨天就完全是扯蛋的逻辑了)if(srcMonth (yesterdayDate.get(GregorianCalendar.MONTH)1) srcDay yesterdayDate.get(GregorianCalendar.DAY_OF_MONTH)){ret 昨天timeExtraStr;// -1d}// “前天”判断逻辑同上elseif(srcMonth (beforeYesterdayDate.get(GregorianCalendar.MONTH)1) srcDay beforeYesterdayDate.get(GregorianCalendar.DAY_OF_MONTH)){ret 前天timeExtraStr;// -2d}else{// 跟当前时间相差的小时数longdeltaHour (delta/(3600* 1000));// 如果小于 7*24小时就显示星期几if(deltaHour 7*24){String[] weekday {星期日,星期一,星期二,星期三,星期四,星期五,星期六};// 取出当前是星期几String weedayDesc weekday[gcSrc.get(GregorianCalendar.DAY_OF_WEEK)-1];ret weedayDesctimeExtraStr;}// 否则直接显示完整日期时间elseret getTimeString(srcDate, yyyy/M/d)timeExtraStr;}}}elseret getTimeString(srcDate, yyyy/M/d)timeExtraStr;}catch(Exception e){System.err.println(【DEBUG-getTimeStringAutoShort】计算出错e.getMessage() 【NO】);}returnret;}5.2 调用示例// 用于首页“消息”界面时getTimeStringAutoShort2(newDate(), false);// 用于聊天内容界面时getTimeStringAutoShort2(newDate(), true);5.3 运行效果▲ 上述代码在RainbowChat Android版上的运行效果(首页)▲ 上述代码在RainbowChat Android版上的运行效果(聊天界面)6、iOS平台上的代码实现(Objective-C)6.1 完整源码源文件TimeTool.h#import interfaceTimeTool : NSObject/*** 仿照微信中的消息时间显示逻辑将时间戳(单位毫秒)转换为友好的显示格式.* 1)7天之内的日期显示逻辑是今天、昨天(-1d)、前天(-2d)、星期(只显示总计7天之内的星期数即-4d)* 2)7天之外(即7天)的逻辑直接显示完整日期时间。* param dt 日期时间对象(本次被判断对象)* param includeTime YES表示输出的格式里一定会包含“时间:分钟”否则不包含(参考微信不包含时分的情况用于首页“消息”中显示时)* return 输出格式形如“刚刚”、“10:30”、“昨天 12:04”、“前天 20:51”、“星期二”、“2019/2/21 12:09”等形式* since 1.3*/ (NSString*)getTimeStringAutoShort2:(NSDate*)dt mustIncludeTime:(BOOL)includeTime; (NSString*)getTimeString:(NSDate*)dt format:(NSString*)fmt;/*** 获得指定NSDate对象iOS时间戳(格式遵从ios的习惯以秒为单位)。*/ (NSTimeInterval) getIOSTimeStamp:(NSDate*)dat;/*** 获得指定NSDate对象iOS时间戳的long形式(格式遵从ios的习惯以秒为单位形如1485159493)。*/ (long) getIOSTimeStamp_l:(NSDate*)dat;end源文件TimeTool.m#import TimeTool.himplementationTimeTool// 仿照微信的逻辑显示一个人性化的时间字串 (NSString*)getTimeStringAutoShort2:(NSDate*)dt mustIncludeTime:(BOOL)includeTime{NSString*ret nil;NSCalendar*calendar [NSCalendarcurrentCalendar];// 当前时间NSDate*currentDate [NSDatedate];NSDateComponents*curComponents [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitWeekdayfromDate:currentDate];NSIntegercurrentYear[curComponents year];NSIntegercurrentMonth[curComponents month];NSIntegercurrentDay[curComponents day];// 目标判断时间NSDateComponents*srcComponents [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitWeekdayfromDate:dt];NSIntegersrcYear[srcComponents year];NSIntegersrcMonth[srcComponents month];NSIntegersrcDay[srcComponents day];// 要额外显示的时间分钟NSString*timeExtraStr (includeTime?[TimeTool getTimeString:dt format: HH:mm]:);// 当年if(currentYear srcYear) {longcurrentTimestamp [TimeTool getIOSTimeStamp_l:currentDate];longsrcTimestamp [TimeTool getIOSTimeStamp_l:dt];// 相差时间(单位秒)longdelta currentTimestamp - srcTimestamp;// 当天(月份和日期一致才是)if(currentMonth srcMonth currentDay srcDay) {// 时间相差60秒以内if(delta 60)ret 刚刚;// 否则当天其它时间段的直接显示“时:分”的形式elseret [TimeTool getTimeString:dt format:HH:mm];}// 当年 当天之外的时间(即昨天及以前的时间)else{// 昨天(以“现在”的时候为基准-1天)NSDate*yesterdayDate [NSDatedate];yesterdayDate [NSDatedateWithTimeInterval:-24*60*60 sinceDate:yesterdayDate];NSDateComponents*yesterdayComponents [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDayfromDate:yesterdayDate];NSIntegeryesterdayMonth[yesterdayComponents month];NSIntegeryesterdayDay[yesterdayComponents day];// 前天(以“现在”的时候为基准-2天)NSDate*beforeYesterdayDate [NSDatedate];beforeYesterdayDate [NSDatedateWithTimeInterval:-48*60*60 sinceDate:beforeYesterdayDate];NSDateComponents*beforeYesterdayComponents [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDayfromDate:beforeYesterdayDate];NSIntegerbeforeYesterdayMonth[beforeYesterdayComponents month];NSIntegerbeforeYesterdayDay[beforeYesterdayComponents day];// 用目标日期的“月”和“天”跟上方计算出来的“昨天”进行比较是最为准确的(如果用时间戳差值// 的形式是不准确的比如现在时刻是2019年02月22日1:00、而srcDate是2019年02月21日23:00// 这两者间只相差2小时直接用“delta/3600” 24小时来判断是否昨天就完全是扯蛋的逻辑了)if(srcMonth yesterdayMonth srcDay yesterdayDay)ret [NSStringstringWithFormat:昨天%, timeExtraStr];// -1d// “前天”判断逻辑同上elseif(srcMonth beforeYesterdayMonth srcDay beforeYesterdayDay)ret [NSStringstringWithFormat:前天%, timeExtraStr];// -2delse{// 跟当前时间相差的小时数longdeltaHour (delta/3600);// 如果小于或等 7*24小时就显示星期几if(deltaHour 7*24){NSArray *weekdayAry [NSArrayarrayWithObjects:星期日, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六, nil];// 取出的星期数1表示星期天2表示星期一3表示星期二。。。。 6表示星期五7表示星期六NSIntegersrcWeekday[srcComponents weekday];// 取出当前是星期几NSString*weedayDesc [weekdayAry objectAtIndex:(srcWeekday-1)];ret [NSStringstringWithFormat:%%, weedayDesc, timeExtraStr];}// 否则直接显示完整日期时间elseret [NSStringstringWithFormat:%%, [TimeTool getTimeString:dt format:yyyy/M/d], timeExtraStr];}}}// 往年else{ret [NSStringstringWithFormat:%%, [TimeTool getTimeString:dt format:yyyy/M/d], timeExtraStr];}returnret;} (NSString*)getTimeString:(NSDate*)dt format:(NSString*)fmt{NSDateFormatter* format [[NSDateFormatteralloc] init];[format setDateFormat:fmt];return[format stringFromDate:(dtnil?[TimeTool getIOSDefaultDate]:dt)];} (NSTimeInterval) getIOSTimeStamp:(NSDate*)dat{NSTimeIntervala [dat timeIntervalSince1970];returna;} (long) getIOSTimeStamp_l:(NSDate*)dat{return[[NSNumbernumberWithDouble:[TimeTool getIOSTimeStamp:dat]] longValue];}end6.2 调用示例// 用于首页“消息”界面时[TimeTool getTimeStringAutoShort2:[NSDatedate] mustIncludeTime:NO];6.3 运行效果▲ 上述代码在RainbowChat iOS版上的运行效果(首页)7、Web网页端的代码实现(JavaScript)7.1 完整源码抱歉因文章字数限制JavaScript版源码无非法贴上来请从链接http://www.52im.net/thread-2371-1-1.html查看JavaScript版完整源码7.2 调用示例// 用于首页“消息”界面时_getTimeStringAutoShort2(1550789954260, false);// 用于聊天内容界面时_getTimeStringAutoShort2(1550789954260, true);7.3 运行效果▲ 上述代码在RainbowChat-Web产品上的运行效果附录更多精品资源下载
http://www.zqtcl.cn/news/451890/

相关文章:

  • 长沙做网站的公司有哪些宁波奉化建设局网站
  • 温岭专业自适应网站建设承德招聘信息网
  • 做公司网站的模板下载wordpress e
  • 网站建设基本知识wordpress 没有小工具
  • 北京完美建设有限公司网站酒店加盟
  • 山东网络推广网站德州市建设局质监站网站
  • api模式网站开发网站打开后显示建设中
  • 排名好的郑州网站建设免费营销培训
  • 美橙互联网站网站主要应用
  • 淘宝客网站做appuv推广平台
  • 网站公司可以做英文网吗图片加字制作免费
  • 海口个人建站模板精品课程云网站建设
  • 阿里网站空间莱芜新闻视频回放
  • 高清网站建设的好处wordpress 房产模板
  • 在建工程查询网站怎么自己开发网站
  • 旧电脑怎么做网站如何自己弄个免费网站
  • 聊城网站营销WordPress工作发布
  • 建造网站需要什么汽车网站建设
  • 网站建设app郑州发布评论
  • 福州网站制作建设网页设计图片是怎么显示的
  • 天津通用网站建设收费网站建设怎么在png上写文字
  • 浏阳做网站报价高校网站站群建设公司
  • 海口网站提升排名网站建设与管理考试题
  • 做网站的算什么行业ui视觉设计常用软件是什么
  • 成都网站建设公司哪家好西安搬家公司哪家便宜
  • 程序员自己做网站怎么能来钱上海猎头公司哪家好
  • 无忧网站建设哪家好手机网站php开发
  • 如何仿制一个网站wordpress+主题课堂
  • 公明做网站渭南网站开发
  • 网站优化排名多少钱查备案网站备案