Age*_*007 5 c# datetime datetime-format
我有相对的datetime字符串:
如何将此转换为精确datetime,与此问题完全相反
你需要编写自己的例程才能这样做,就像做反对者的人一样.
基本上,您需要解析文本以查找间隔(即分钟,小时,天等等),数量以及是否在过去或将来(使用ago或from).
此时,您将拥有足够的数据来构建适当的TimeSpan实例,并使用它DateTime.Now来获取该时间.
为了使上述工作正常,您需要确保要解析的字符串值是标准化的.
这段代码应该有效:
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);
Run Code Online (Sandbox Code Playgroud)
它解析间隔名称(例如分钟,小时,天)并将它们相乘以获得分钟数,因为稍后它使用DateTime.Now.AddMinutes方法,同样的事情可以使用TimeSpan和调用DateTime.Now.Add.
这是另一个处理包含多个间隔名称的字符串大小写的示例,例如"10小时15分钟前":
// If there are mixed interval types in an input string
string input = "10 days and 10 hours ago";
// Parse out the intervals and numbers
var matches = Regex.Matches(input,
@"(?<number>\d+)\s(?<interval>(day)|(minute)|(hour))");
// Convert them to dictionary
var dic = matches
.Cast<Match>()
.ToDictionary(
key => key.Groups["interval"].Value,
o => int.Parse(o.Groups["number"].Value));
// Calculate the total number of minutes for each interval
DateTime result = DateTime.MinValue;
int totalMinutes = 0;
foreach (var keyValue in dic)
{
if (keyValue.Key.Contains("minute"))
totalMinutes += keyValue.Value;
else
if (keyValue.Key.Contains("hour"))
totalMinutes += keyValue.Value * 60;
else
if (keyValue.Key.Contains("day"))
totalMinutes += keyValue.Value * 1440;
else
throw new Exception("Unparsable time format");
}
result = DateTime.Now.AddMinutes(-totalMinutes);
Run Code Online (Sandbox Code Playgroud)