C#中IndexOf的用法

最近在.net项目方面的时候遇到的一个时间格式的转换问题,如何将已经上机的时间转换出来?更加简洁明了美观?

我的逻辑是这样的,客户上机登录后得出登录时间,客户已用的上机时间等于现在时间减去客户上机的登录时间

(已用时间=现在时间-上机登录时间)可得出来的时间非常的不美观。

通过网上查询得出了IndexOf函数和substring()函数的结合使用得出了时间格式的转换,转换后的结果如下所示

这样是否美观多了。

下面为代码展示:

public void TimeBilling()
        {
            Facade.TimeBillingFacade timeBillingFacade = new Facade.TimeBillingFacade();
            List<Entity.CustomerActivation> list1 = customerActivationFacade.GetCustomerActivationList1();//返回当前已上机用户的卡号
            for (int i = 0; i < list1.Count; i++)
            {
                string identityNo = list1[i].IdentityNo;

                List<Entity.CustomerActivation> list = customerActivationFacade.GetCustomerActivationByIdentityNo(identityNo);//返回当前已上机用户的开始上机时间
                for (int j = 0; j < list.Count; j++)
                {
                    string BeginTime = list[j].BeginTime;
                    string Time = Convert.ToString(DateTime.Now - Convert.ToDateTime(BeginTime));//此时间为用户的上机已用时间

                    //转换时间格式
                    int a = Time.IndexOf(':');//使用IndexOf()函数从前往后找出时间冒号:在时间Time中的索引位置,并将返回结果赋值给int型变量a
                    int price = Convert.ToInt32(Time.Substring(a + 1, 2));//Time.Substring(a + 1, 2)为截取从a+1到2位以内的字符串
                    int day = Convert.ToInt32(Time.Substring(0, 1)) * 24;
                    int hour = Convert.ToInt32(Time.Substring(a - 2, 2));
                    string Hour = Convert.ToString(day + hour);
                    string time = Hour + "时" + Time.Substring(a + 1, 2) + "分";//Time.Substring(a + 1, 2)为截取从a+1到2位以内的字符串

                    //timeBillingFacade.TimeBilling(identityNo, time, lastMoney);//将当前已经上机登录用户的已用时间传值至外观层

                    double rate;   //定义费率
                    string PriceId = Convert.ToString(TestHelpCommon.PriceId);
                    List<Entity.Customer> list2 = timeBillingFacade.GetTimeBillingBycboprice(PriceId);
                    //查询是否为会员
                    if (TestHelpCommon.CustomerType(identityNo))
                    {
                        rate = Convert.ToDouble(list2[0].VIPUsers);
                    }
                    else
                    {
                        rate = Convert.ToDouble(list2[0].OrdinaryUsers);
                    }

                    //判断余额是否充足
                    if (price % 6 == 0)   //每6分钟进行一次扣费,上机不满6分钟不计费
                    {
                        if (Convert.ToDouble(list[j].LastMoney) > 0)
                        {
                            double lastMoney = Convert.ToDouble(list[j].LastMoney) - rate / 10;
                            timeBillingFacade.TimeBilling(identityNo, time, lastMoney);//将当前已经上机登录用户的已用时间传值至外观层
                        }
                        else
                        {
                            //当余额不足时自动结账下机
                            double LastMoney = Convert.ToDouble(list[j].LastMoney);
                            TestHelpCommon.CheckOut(identityNo, LastMoney);
                        }
                    }
                }
            }
        }

下面为我网上所找的资料。

IndexOf() 


查找字串中指定字符或字串首次出现的位置,返首索引值,如: 
str1.IndexOf("字"); //查找“字”在str1中的索引值(位置) 
str1.IndexOf("字串");//查找“字串”的第一个字符在str1中的索引值(位置) 
str1.IndexOf("字",start,end);//从str1第start+1个字符起,查找end个字符,查找“字”在字符串STR1中的位置[从第一个字符算起]注意:start+end不能大于str1的长度


indexof参数为string,在字符串中寻找参数字符串第一次出现的位置并返回该位置。如string s="0123dfdfdf";int i=s.indexof("df");这时i==4。 
如果需要更强大的字符串解析功能应该用Regex类,使用正则表达式对字符串进行匹配。

 
indexof() :在字符串中从前向后定位字符和字符串;所有的返回值都是指在字符串的绝对位置,如为空则为- 1

string test="asdfjsdfjgkfasdsfsgfhgjgfjgdddd";

   test.indexof(’d’)       =2            //从前向后 定位 d 第一次出现的位置
   test.indexof(’d’,1)     =2           //从前向后 定位 d 从第三个字符串 第一次出现的位置
   test.indexof(’d’,5,2)   =6      //从前向后 定位 d 从第5 位开始查,查2位,即 从第5位到第7位;

lastindexof() :在字符串中从后向前定位字符和字符串;、
用法和 indexof() 完全相同。

以下为自己学习理解时所敲的控制台程序

====================================================================


IndexOfAny ||lastindexofany

他们接受字符数组做为变元,其他方法同上,返回数组中任何一个字符最早出现的下标位置

如下

         char[] bbv={’s’,’c’,’b’};
         string abc = "acsdfgdfgchacscdsad";
        
         Response.Write(abc.IndexOfAny(bbv))=1
         Response.Write(abc.IndexOfAny(bbv, 5))=9
         Response.Write(abc.IndexOfAny(bbv, 5, 3))=9

lastindexofany 同上。
====================================================================


substring() 用法

string a="aadsfdjkfgklfdglfd"

a.substring(5)      //截取从第五位以后的所有字符串

a.substring(0,5)     //截取从第0到第5 以内的所有字符串

以下为自己学习理解时所敲的控制台程序

C#IndexOf方法用于查找字符串指定字符或子字符串首次出现的位置。它返回字符或子字符串的索引值。引用提到了关于C#IndexOf方法的详细介绍。而引用和引用[3]则是具体的示例代码和说明。 在引用的示例,字符串"a"的IndexOf方法被调用,搜索字符"h"在字符串首次出现的位置。这里的参数1表示从字符串的第一个字符开始搜索,参数5表示从起始位置往后检索5个字符。最后输出的结果是4,表示字符"h"在字符串的索引位置。 因此,C#IndexOf方法可以用于查找字符串指定字符或子字符串首次出现的位置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [c#学习记录之Indexof()](https://blog.csdn.net/xingfutuzi/article/details/128000166)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [c# indexof 用法深入理解](https://download.csdn.net/download/weixin_38640985/13062206)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小刘要努力(ง •̀_•́)ง

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值