gpt4 book ai didi

c# - 将相对日期时间字符串转换为 DateTime 对象

转载 作者:太空狗 更新时间:2023-10-29 22:14:21 26 4
gpt4 key购买 nike

我有相对的 datetime 字符串:

  • “5 分钟前”
  • “10 小时前”
  • “3 天前”等

如何将其转换为精确的 datetime,与 this question 正好相反

最佳答案

这段代码应该可以工作:

        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 方法,同样的事情可以使用 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);

关于c# - 将相对日期时间字符串转换为 DateTime 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12002965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com