C# 如何计算两个这个字符串格式的时间00:00:00的间隔

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 如何计算两个这个字符串格式的时间00:00:00的间隔相关的知识,希望对你有一定的参考价值。

            string s1 = "2014-4-10 11:02:00";
            string s2 = "2014-4-10 10:02:00";
            DateTime t1 = DateTime.Parse(s1);
            DateTime t2 = DateTime.Parse(s2);
            TimeSpan ts = t1 - t2;
            Console.WriteLIne( ts.Hours);  //小时
            Console.WriteLIne( ts.Minutes); //分
            Console.WriteLIne( ts.Seconds); //秒

参考技术A 先转化为DateTime格式,一个A,一个B,然后用TimeSpan dt=A-B就可以了 参考技术B TimeSpan 你百度下 这个类可以 比较 两个时间差,,以及还有很多用法

如何计算 C# 中两个字符串之间的相似度?

【中文标题】如何计算 C# 中两个字符串之间的相似度?【英文标题】:How can I calculate similarity between two strings in C#? 【发布时间】:2012-03-28 06:33:03 【问题描述】:

我希望评估两个字符串之间的相似性(包括大小写)并给出一个介于 0 和 1 之间的值。

我尝试了 Levenshtein 距离实现,但它只给出整数,不比较内部字母。

例如比较“ABCD”和“Abcd”给出的距离为 3,而“AOOO”也给出了 3 的距离,但显然“Abcd”比“AOOO”更匹配。

因此,与“ABCD”相比,我希望“ABcd”最相似,然后是“Abcd”,然后是“AOOO”,然后是“AOOOO”

我也看过here,但我不是在寻找可变长度算法。

谢谢

【问题讨论】:

尝试仅使用小写字符串的 Levensthein 距离? 那么,AOOOBCD 是否比 Abcd 更匹配?我怀疑你的“更好”的概念不会很好地支撑住火。您可能希望最好的办法是按照一些任意规则对它们进行排名(例如,首先按 Levenstein,其次按案例更改的数量等)并向用户显示一个列表,该用户的相似概念可能与您的概念不匹配。 @IraBaxter 不,“Abcd”将比“AOOOBCD”更匹配 这不是一个真正的编程(实现)问题。这是一个设计问题——设计一个合适的相似函数。 【参考方案1】:
    bool check(string[] a, string s)
    
        for (int i = 0; i < a.Length; i++)
            if (s == a[i])
                return true;
        return false;
    

    public double simi(string string1, string string2)
    
        int sub1 = 0;
        int sub2 = 0;
        string[] sp1 = new string[string1.Length - 1];
        string[] sp2 = new string[string2.Length - 1];
        string[] sp3 = new string[string1.Length - 1];
        string[] sp4 = new string[string2.Length - 1];
        for (int i = 0; i < string1.Length - 1; i++)
        
            string x = "";
            x = string1.Substring(i, 2);

            sp1[sub1] = x;
            ++sub1;
        
        for (int i = 0; i < string2.Length - 1; i++)
        
            string x = "";
            x = string2.Substring(i, 2);
            sp2[sub2] = x;
            ++sub2;
        


        int j = 0, k = 0;

        for (int i = 0; i < sp1.Length; i++)
            if (check(sp3, sp1[i]) == true)
            

                continue;
            
            else
            
                sp3[j] = sp1[i];
                j++;

            

        for (int i = 0; i < sp2.Length; i++)
            if (check(sp4, sp2[i]) == true)
            

                continue;
            
            else
            
                sp4[k] = sp2[i];
                k++;


            

        Array.Resize(ref sp3, j);
        Array.Resize(ref sp4, k);

        Array.Sort<string>(sp3);
        Array.Sort<string>(sp4);

        int n = 0;


        for (int i = 0; i < sp3.Length; i++)
        

            if (check(sp4, sp3[i]))
            

                n++;
            


        

        double resulte;

        int l1 = sp3.Length;
        int l2 = sp4.Length;

        resulte = ((2.0 * Convert.ToDouble(n)) / Convert.ToDouble(l1 + l2)) * 100;

        return resulte;
    

【讨论】:

【参考方案2】:

使用自定义表 T 调整 Levenshtein 距离。令插入成本 = 1。删除成本也为 1。令 T(c,d) 表示将 c 替换为 d 的惩罚。 T(c,c) 应该 = 0。T(c,d) 应该

定义 Max(n,m) 为长度为 n 和 m 的字符串的最大理论距离。显然,Max(n,m) = n+m。

定义距离(s,t)为将s更改为t的成本除以Max(s,t)。给你。

在定义 T 时要小心,以便定义遵循距离公理:

距离(s,s) = 0 距离(s,t) = 距离(t,s) 距离(s,t)

那么它会在更多的情况下更有用。

【讨论】:

【参考方案3】:

试试这样的

double d = (LevenshteinDist(s, t) + LevenshteinDist(s.ToLower(), t.ToLower())) /
           2.0 * Math.Max(s.Length, t.Length);

如果您希望对大小写差异的重要性低于字母差异,则可以对术语赋予不同的权重

double d = (0.15*LevenshteinDist(s, t) + 
            0.35*LevenshteinDist(s.ToLower(), t.ToLower())) /
           Math.Max(s.Length, t.Length);

请注意,权重总和为 0.5,因此除以 2.0 已过时。

【讨论】:

不错!应该想到的 Levenshtein 距离在 c# gist.github.com/Davidblkx/e12ab0bb2aff7fd8072632b396538560

以上是关于C# 如何计算两个这个字符串格式的时间00:00:00的间隔的主要内容,如果未能解决你的问题,请参考以下文章

mysql 计算两个日期的时间差函数小时分钟格式

c# 时间格式Mon Apr 28 2014 00:00:00 GMT 0800 (中国标准时间) 如何转换

mysql 计算两个日期的时间差函数小时分钟格式

C#格式化字符串

C#如何判断当前时间等于晚上凌晨这个时间

计算两个不同格式日期之间的时间差