传入一个时间,返回和当前的时间差
2011-05-22 21:29
543 查看
调用方式:
TBuf<128> bSour;
TBuf<128> bDesc;
bSour.Append(_L("2011-05-22T21:50:15+08:00"));
ConvData(bSour, bDesc);
iEikonEnv->InfoWinL(bDesc, KNullDesC);
//传入一个时间,然后计算出时间差,用分钟表示,大于60分钟就用小时表示,大于24小时,就用天表示,大于24天,就用月表示
//aSource :传入格式:2011-05-18T20:54:15+08:00
//aDesc :传出数据,如果为空,表示传入的时间大于当前时间
void CWorldView::ConvData(const TDesC & aSource, TDes & aDesc)
{
//如果小于18位,也就是传过来的时间字符串有误
if (18 > aSource.Length())
return;
TInt nYear;
TInt nMonth;
TInt nDay;
TLex iLex;
//年
iLex = aSource.Mid(0, 4);
iLex.Val(nYear);
//月
iLex = aSource.Mid(5, 2);
iLex.Val(nMonth);
//日
iLex = aSource.Mid(8, 2);
iLex.Val(nDay);
TInt nHour = 0;
TInt nMinute = 0;
//计算小时
iLex = aSource.Mid(11, 2);
iLex.Val(nHour);
//计算分钟
iLex = aSource.Mid(14, 2);
iLex.Val(nMinute);
TDateTime time;
time.SetYear(nYear);
time.SetMonth(TMonth(EJanuary + nMonth - 1));
time.SetDay(nDay - 1);
time.SetHour(nHour);
time.SetMinute(nMinute);
TTime tCur;
tCur.HomeTime();
TTime tFirst;
tFirst = time;
//计算月数
TInt nValue = tCur.MonthsFrom(tFirst).Int();
//时间错误
if (0 > nValue)
{
return;
}
//月份大于大当前月份
if (0 < nValue)
{
aDesc.AppendNum(nValue);
aDesc.Append(_L(" month"));
return;
}
//计算天数
nValue = tCur.DaysFrom(tFirst).Int();
//天数大于当前天数
if (0 > nValue)
{
return;
}
//够一天
if (0 < nValue)
{
aDesc.AppendNum(nValue);
aDesc.Append(_L(" day"));
return;
}
//小时
TTimeIntervalHours hours;
tCur.HoursFrom(tFirst, hours);
nValue = hours.Int();
//时间错误
if (0 > nValue)
{
return;
}
//够一个小时
if (0 < nValue)
{
aDesc.AppendNum(nValue);
aDesc.Append(_L(" hours"));
return;
}
//分钟
TTimeIntervalMinutes minutes;
tCur.MinutesFrom(tFirst, minutes);
nValue = minutes.Int();
//分钟错误
if (0 > nValue)
{
return;
}
aDesc.AppendNum(nValue);
aDesc.Append(_L(" minutes"));
return;
}
TBuf<128> bSour;
TBuf<128> bDesc;
bSour.Append(_L("2011-05-22T21:50:15+08:00"));
ConvData(bSour, bDesc);
iEikonEnv->InfoWinL(bDesc, KNullDesC);
//传入一个时间,然后计算出时间差,用分钟表示,大于60分钟就用小时表示,大于24小时,就用天表示,大于24天,就用月表示
//aSource :传入格式:2011-05-18T20:54:15+08:00
//aDesc :传出数据,如果为空,表示传入的时间大于当前时间
void CWorldView::ConvData(const TDesC & aSource, TDes & aDesc)
{
//如果小于18位,也就是传过来的时间字符串有误
if (18 > aSource.Length())
return;
TInt nYear;
TInt nMonth;
TInt nDay;
TLex iLex;
//年
iLex = aSource.Mid(0, 4);
iLex.Val(nYear);
//月
iLex = aSource.Mid(5, 2);
iLex.Val(nMonth);
//日
iLex = aSource.Mid(8, 2);
iLex.Val(nDay);
TInt nHour = 0;
TInt nMinute = 0;
//计算小时
iLex = aSource.Mid(11, 2);
iLex.Val(nHour);
//计算分钟
iLex = aSource.Mid(14, 2);
iLex.Val(nMinute);
TDateTime time;
time.SetYear(nYear);
time.SetMonth(TMonth(EJanuary + nMonth - 1));
time.SetDay(nDay - 1);
time.SetHour(nHour);
time.SetMinute(nMinute);
TTime tCur;
tCur.HomeTime();
TTime tFirst;
tFirst = time;
//计算月数
TInt nValue = tCur.MonthsFrom(tFirst).Int();
//时间错误
if (0 > nValue)
{
return;
}
//月份大于大当前月份
if (0 < nValue)
{
aDesc.AppendNum(nValue);
aDesc.Append(_L(" month"));
return;
}
//计算天数
nValue = tCur.DaysFrom(tFirst).Int();
//天数大于当前天数
if (0 > nValue)
{
return;
}
//够一天
if (0 < nValue)
{
aDesc.AppendNum(nValue);
aDesc.Append(_L(" day"));
return;
}
//小时
TTimeIntervalHours hours;
tCur.HoursFrom(tFirst, hours);
nValue = hours.Int();
//时间错误
if (0 > nValue)
{
return;
}
//够一个小时
if (0 < nValue)
{
aDesc.AppendNum(nValue);
aDesc.Append(_L(" hours"));
return;
}
//分钟
TTimeIntervalMinutes minutes;
tCur.MinutesFrom(tFirst, minutes);
nValue = minutes.Int();
//分钟错误
if (0 > nValue)
{
return;
}
aDesc.AppendNum(nValue);
aDesc.Append(_L(" minutes"));
return;
}
相关文章推荐
- NSDate的一个分类,判断是否是今天,昨天,今年,获得与当前时间的差距,返回一个只有年月日的日期
- 给定一个时间,计算距离当前时间的时间差
- 传入一个时间戳,传入后,会与本地的时间进行对比,得到返回的字符串,有一小时前,一天前,等等
- iOS 获取当前时间以及计算年龄(时间差)
- 实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个用于显示当前时间的Google Android 窗口小部件(AppWidge
- 计算指定时间与当前的时间差
- 根据Long值求与当前系统时间的时间差
- 【面试题】实现一个栈,要求Push(入栈),Pop(出栈),Min(返回最小值的操作)的时间复杂度为O(1)
- 现一个用于显示当前时间的Google Android 窗口小部件(AppWidget)
- SQL中返回当前日期和时间
- 服务 {49A27252-A326-4EF1-B698-6EBC7068833C} 的计时器作业 id {573BE459-DF82-481C-84BD-CA14D287450B} 配置刷新的上一个实例仍在运行,因此将跳过当前的实例。请考虑增加作业之间的时间间隔。
- 做的一个面试题5分钟刷新当前时间的总结
- DB2查询当前时间与指定时间的时间差(相隔的秒数)
- 011实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值,时间复杂度都为O(1)(keep it up)
- C#--第11周实验--任务1(建立Windows窗体应用程序)--设计一个窗体--单击按钮时,在标签上显示当前系统时间
- JS计算距当前时间的时间差实例
- android获取当前系统时间,同时比较当前时间是否在一个时间段范围内
- 使用my97对区间日期进行操作的时候,后一个时间必须大于前一个时间,并且不可以超过当前的时间
- 检查一个路径下文件是否存在,如果不存在设置一个定时器,在定时器内每隔一定时间检查一次,直到该文件存在返回成功,或者定时超时返回失败