由于索尼改变了他们的奖杯服务器身份验证的工作方式,我正在寻找一种替代解决方案来近似奖杯日期。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 个月。如果我有 string Attained:3 hours ago
,它应该使用当前日期并减去 3 小时来近似获得日期。如果我有 string Attained: 5 minutes ago
,它应该使用当前日期并减去 5 分钟来近似获得日期。
我的计划是将此代码作为 Web 服务运行并与桌面客户端一起运行。我不确定我应该返回 TimeSpan 还是直接计算日期?有更好的方法吗?并非所有月份都是 30 天,有些年份超过 365 天(闰年),因此进行硬编码计算不一定有效。