unity功能——处理string格式的Time,并判断时间先后

25 篇文章 1 订阅
15 篇文章 0 订阅
本文介绍了如何将时间字符串如'2021/12/30 17:59:25'转换为整数列表,并详细阐述了转换过程,包括正则表达式替换、字符串切割、字符判空转化和字符转数字。此外,还讲解了如何通过比较整数列表来判断两个时间的先后顺序,主要依据列表中对应位置的数值大小。提供完整的C#代码实现这两个功能。
摘要由CSDN通过智能技术生成

一、处理时间格式

1、时间格式
(1)输入:string
string:“2021/12/30 17:59:25”;
(2)输出:List<int>()
List<int>():{2021,12,30,17,59,25,00};
2、方法思路
(1)正则表达式:Regex类

        将string里的空格转为常见无干扰字符“,”;

(2)字符串替换:string.Replace()

根据时间格式,将(“/“,“:”,“am”等)非数字相关的字符删去,或替换为“,”:

使用string.Replace(char A,char B),将字符串里的A字符替换为B字符;

a = a.Replace("/", ",");//斜杠替换为逗号

a = a.Replace("am", "");//删除am字符
(3)字符串切割:string.Split()
1)string.Split('分割字符')

将字符串按指定要求进行分割成多个字段,并将分割后的字符放进数组中;

//将a字符串,根据字符串里的“,”为分割点分割
string[] newA = a.Split(',');
2)注意分割后可能存在的空白字符
若:a ="123,456,"   

则:newA ={123,456,};        //数组中3个元素:{123},{456},{};

a根据逗号切割,最后“456,”,这里会分割成逗号前  456  和逗号后  空字符 两个元素;

(4)字符判空转化

判断字符是否为空,并将空格字符转化为不干扰数字大小的“00”;

string.IsNullOrEmpty(“字符串”),返回bool值;

string newA =“”;

if (string.IsNullOrEmpty(newA)) newA = "00";
(5)字符转数字;

这里字符都是整数,比较简单直接转化为int类型:

int x = int.Parse("8");

更多不同格式之间转化,可以看我之前一篇笔记:

C# 数据处理——(包括但不限)浮点数设置小数点后位数

(6)遍历数组,将string数组,转化为List<int>;
3、完整功能方法代码
    /// <summary>
    /// 处理string类型的time,并获得其int类型的list
    /// </summary>
    /// <param name="a">time格式:“2021/12/30 17:59:25”</param>
    /// <returns>返回格式“[2021,12,30,17,59,25]”</returns>
    private List<int> GetTimeList(string a)
    {
        List<int> listValue = new List<int>();
        a = Regex.Replace(a, @"\s", ",");//空格转换为“,”
        a = a.Replace(":", ",");
        a = a.Replace("/", ",");
        //a = a.Replace("am", "");//删除am字符
        string[] newA = a.Split(',');
        for (int i = 0; i < newA.Length; i++)
        {
            int index = i;
            if (string.IsNullOrEmpty(newA[index])) newA[index] = "00";
            listValue.Add(int.Parse(newA[index]));
        }
        return listValue;
    }

二、判断时间先后

string类型时间,转化为List<int>,列表里不同位置的占比不同;

可比较List<int>里同下标的数字大小,判断时间先后

1、原理

(1)越靠近列表前面的数字越大,越接近最近时间、时间最新/最晚;

(2)这里精确到秒,判断时间先后时,基本不担心会有重复相同的。

比如:          2021/12/30 17:59:25”;       “2019/8/25 16:19:22”;        “2019/8/25 16:39:22”;

对应list:    {2021,12,30,17,59,25,00},   {2019,8,25,16,19,22,00},   {2019,8,25,16,39,22,00}

 {2021,12,30,17,59,25,00}        与         {2019,8,25,16,19,22,00}        比较,

index=0位置上一个是2021,一个是2019,直接判断2021的时间晚于2019;

{2019,8,25,16,19,22,00}           与        {2019,8,25,16,39,22,00}        比较;

前面年月日时对应的时间数字都相同{2019,8,25,16,},在分钟上,19小于39,可判断时间先后。

2、方法思路
(1)基于上面将时间字符串转化为数字列表;
(2)从前往后比较数字List<int>对应下标的数字大小;

只要判断出某个列表的值大于或小于另一个同下标里数字,即可判断出两个时间的先后顺序,数字大的时间对应于时间更晚;

1)先判断比较的两个时间对应的列表长度是否相同,不相同则以短的列表长度为之后遍历次数;

2)循环遍历同下标的两个list里的值是否相等;

(3)返回比较结果:true/false;
3、完整功能方法代码
    /// <summary>
    /// 判断时间a、b先后,时间是否先于b
    /// </summary>
    /// <param name="a">字符串a</param>
    /// <param name="b">字符串b</param>
    /// <returns></returns>
    private bool CompareString(string a, string b)
    {
        int isCompare = 0;
        List<int> aList = GetTimeList(a);
        List<int> bList = GetTimeList(b);
        int len = aList.Count <= bList.Count ? aList.Count : bList.Count;
        for (int i = 0; i < len; i++)
        {
            int index = i;
            if (aList[index] > bList[index]) isCompare = 1;
            if (aList[index] < bList[index]) isCompare = -1;
            if (isCompare != 0) break;
        }
        return (isCompare == -1) ? false : true;
    }

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值