答案 0 :(得分:6)
你需要编写自己的例程才能这样做,就像做反对的人一样。
基本上,您需要解析文本以查找间隔(即分钟,小时,天等...),金额以及是否在过去或将来(使用ago
或{{ 1}})。
此时,您将拥有足够的数据来构建适当的from
实例,并将其与TimeSpan
一起使用以获得该时间。
为了使上述功能正常工作,您需要确保要解析的字符串值是标准化的。
答案 1 :(得分:6)
此代码应该有效:
string input = "10 days ago";
DateTime result = DateTime.MinValue;
int minutesMultiplier = 0;
if (input.Contains("minute"))
minutesMultiplier = 1;
else
if (input.Contains("hour"))
minutesMultiplier = 60;
else
if (input.Contains("day"))
minutesMultiplier = 1440;
else
throw new Exception("Couldn't parse time format");
string numberStr = input.Split(' ')[0];
int number;
if (int.TryParse(numberStr, out number))
result = DateTime.Now.AddMinutes(-number * minutesMultiplier);
它解析间隔名称(例如分钟,小时,天)并将它们相乘以获得分钟数,因为稍后它使用DateTime.Now.AddMinutes
方法,同样的事情可以使用{{1并致电TimeSpan
。
这是另一个处理包含多个区间名称的字符串大小写的示例,例如“10小时15分钟前”:
DateTime.Now.Add
答案 2 :(得分:2)
正确的方法是将您的相对值存储为TimeSpan
值,然后从DateTime.Now
(或从您想要用作基础的任何DateTime
中减去该值。)
您可以使用int.Parse
等方法将数字(分钟数,小时数等)转换为整数值,然后将其复制到TimeSpan
值中。确切的解析算法取决于字符串的实际格式,即那里允许的单词,以及数字可能出现的顺序。
如果您的问题中已经隔离了字符串,您可以尝试使用正则表达式(使用Regex
class)对它们进行反汇编:
^(\d+)\s+([a-z]+)\s+ago$