“的字符串扩展名”;今天",&引用;“昨天”&引用;“8秒前”;,等在C#

“的字符串扩展名”;今天",&引用;“昨天”&引用;“8秒前”;,等在C#,c#,C#,有没有人听说过或访问过一些c#字符串扩展代码片段或库,它们可以将“昨天”、“今天”、“明天”等内容转换为日期时间或“8秒前”、“10分钟后”转换为时间跨度 如果没有,你有没有想过在C#中会是什么样子 谢谢我不知道有哪家图书馆是开箱即用的,但是写自己的就足够简单了: public static class DateTimeExtensions { public static DateTime Yesterday (this DateTime x) { return x.AddDays(-1);

有没有人听说过或访问过一些c#字符串扩展代码片段或库,它们可以将“昨天”、“今天”、“明天”等内容转换为日期时间或“8秒前”、“10分钟后”转换为时间跨度

如果没有,你有没有想过在C#中会是什么样子


谢谢

我不知道有哪家图书馆是开箱即用的,但是写自己的就足够简单了:

public static class DateTimeExtensions
{

public static DateTime Yesterday (this DateTime x)
{
return x.AddDays(-1);
}

}
然后,您可以执行以下操作:

var yesterday = DateTime.Now.Yesterday();
编辑: 似乎您只想将逐字字符串转换为日期时间。我不明白如果不将某些字符串显式映射到某个条件,你怎么能做到这一点

public static DateTime GiveMeADateTime(this string stringValue)
{
switch (stringValue)
{
case "today": return DateTime.Now;
case "tomorrow": return DateTime.Now.AddDays(1);
default: return DateTime.Now;
}
}
然后你可以像这样使用它:

var todaysDate = "today".GiveMeADateTime();

请注意,此不是非常动态的,也不可维护。但我想这可能会给你一些想法。

我从某个地方,某个时候得到了这个

public static string ElapsedTime(DateTime dtEvent) 
{ 
    TimeSpan TS = DateTime.Now - dtEvent; 
    int intYears = DateTime.Now.Year - dtEvent.Year; 
    int intMonths = DateTime.Now.Month - dtEvent.Month; 
    int intDays = DateTime.Now.Day - dtEvent.Day; 
    int intHours = DateTime.Now.Hour - dtEvent.Hour; 
    int intMinutes = DateTime.Now.Minute - dtEvent.Minute; 
    int intSeconds = DateTime.Now.Second - dtEvent.Second; 
    if (intYears > 0) return String.Format("{0} {1} ago", intYears, (intYears == 1) ? "year" : "years");
    else if (intMonths > 0) return String.Format("{0} {1} ago", intMonths, (intMonths == 1) ? "month" : "months");
    else if (intDays > 0) return String.Format("{0} {1} ago", intDays, (intDays == 1) ? "day" : "days");
    else if (intHours > 0) return String.Format("{0} {1} ago", intHours, (intHours == 1) ? "hour" : "hours");
    else if (intMinutes > 0) return String.Format("{0} {1} ago", intMinutes, (intMinutes == 1) ? "minute" : "minutes");
    else if (intSeconds > 0) return String.Format("{0} {1} ago", intSeconds, (intSeconds == 1) ? "second" : "seconds"); 
    else 
    { 
        return String.Format("{0} {1} ago", dtEvent.ToShortDateString(), dtEvent.ToShortTimeString()); 
    } 
} 

既然这是一场关于这个问题的公开辩论

对于C#或其他方面,我没有看到类似的情况,因此:

显然,您需要一个解析器

1) 自己制作一个“方便”的解析器——根据您在这里所针对的“语言”,如果它足够简单,您可以通过简单的“标记化”来解决,只需过滤“已知单词”(例如,不介意词法分析等,允许使用“陌生”单词),将它们放入篮子中并提取数字。匹配秒数等、数量和一些短语。这并不理想,离它很远,但如果简单的话,如果它能工作就好了

2) 正则表达式对于各种类型的问题来说并不理想——但是,如果您将问题最小化,您可以解析出其中的一些问题。就我个人而言,我不会,但如果你需要一个快速的、肮脏的、没有真正的语言,只要解析出简单的格式,就可以尝试一下

3) 要获得更复杂、更好的解决方案,可以使用一级解析器,比如C#的libs(虽然帮助不大,但如果需要,可以提出更具体的问题,我将尝试挖掘一些代码)。

还有一种是基于表达式的C#native解析器,使用起来很有趣(虽然速度和性能不如Antlr,但对您来说可能不重要,更容易使用,更多帮助等等)

你可以自己写点东西来做你想做的事。。。而不是依赖于扩展;)我们讨论的是理解用自然语言编写的字符串,还是“DateTime.dayed”、“DateTime.tomory”函数?如果您想将字符串
“dayed”
转换为DateTime,那么就没有扩展。如果有的话,它必须支持所有种类的语言,而不仅仅是英语。旁注:如果你真的对这些有趣的时间值感兴趣,最好使用自定义类型,例如,“昨天”实际上是一个范围,“8秒前”是一对{offset,current time},其中“current time”可能是值或函数…这不是解析-只是格式化-只是说:)是的,它与他试图做的事情有点不相关,我想我会把它放在这里。:)我必须将此代码添加到我的个人库中。非常有帮助!只要有用就好:)我在别的地方找到了“以前的事”。我想在“8秒前”走另一条路。ToTimeSpan()。同意如果有帮助,那就好,反过来说。类似于“今天”。ToDateTime()或“8秒前”。ToTimeSpan()。是否要将字符串解析为DateTime?是的,可能在此处找到了答案:(正在调查)