【发布时间】:2013-11-12 01:42:56
【问题描述】:
由于 Sony 改变了他们的奖杯服务器身份验证的工作方式,我正在寻找一种替代解决方案来估算奖杯日期。 UK Playstation Network 网站在未锁定的奖杯下方有一个字符串,该字符串与获得奖杯的时间大致相同。我有以下代码:
private TimeSpan ParseTimeSpan(string datestring)
{
TimeSpan ts = new TimeSpan();
datestring = datestring.Replace("Attained:", ""); // strip Attained:
string[] parts = datestring.Split(' ');
int numeric = int.Parse(parts[0]);
string duration = parts[1];
switch(duration)
{
case "minutes":
ts = new TimeSpan(0, numeric, 0);
break;
case "hours":
ts = new TimeSpan(numeric, 0, 0);
break;
case "days":
ts = new TimeSpan(numeric, 0, 0, 0);
break;
case "months":
ts = new TimeSpan(numeric * 30, 0, 0);
break;
case "years":
ts = new TimeSpan(numeric * 365, 0, 0);
break;
}
return ts;
}
如果我的一个奖杯下面有字符串Attained:17 months ago,它应该是当前月份减去 17 个月。如果我有字符串Attained:3 hours ago,它应该使用当前日期并减去 3 小时来近似获得日期。如果我有字符串 Attained: 5 minutes ago,它应该用当前日期减去 5 分钟来近似获得日期。
我的计划是将此代码作为 Web 服务运行并与桌面客户端一起运行。我不确定我应该返回 TimeSpan 还是直接计算日期?有更好的方法吗?并非所有月份都是 30 天,有些年份超过 365 天(闰年),因此硬编码计算不一定有效。
【问题讨论】:
标签: c# date date-arithmetic