假设有:甲 ,乙, 丙, 丁. 4个班,每天24小时.分为两个班(白班, 中夜班).甲,乙,丙,丁4个班按照规律轮渡倒班.
假设从2000年1月1日开始,倒班规律如下:-------------------------------------------------------------------------------------
(日期) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12| 13| 14|......|
-----------------------------------------------------------------------------------
(白班) | 丁 | 乙 | 丙 | 甲  | 丁 | 乙 | 丙 | 甲 | 丁  | 乙  | 丙  |  甲|  丁 |  乙 | .....|
-----------------------------------------------------------------------------------
(中夜) | 甲 | 丁 | 乙 | 丙  | 丁 | 乙 | 丙 | 丁 | 乙  | 丙  | 丁  |  乙|  丙 |  甲 |......|
-------------------------------------------------------------------------------------由上图可知白班的顺序是:丁,乙,丙,甲.....依此顺序循环类推.中夜班的顺序是:甲,丁,乙,丙.....以此类推现在的问题是..我输入一个时间,怎样求出这个时间是甲?乙?丙?丁?

解决方案 »

  1.   


            static void Main(string[] args)
            {
                Console.WriteLine(GetClass(new DateTime(2008,8,8,20,0,0)));//输出为乙
            }        public static string GetClass(DateTime dt)
            {
                DateTime dtBase = new DateTime(2000, 1, 1, 0, 0, 0);
                if (dt < dtBase)
                    return "输入不正确";
                TimeSpan ts = dt - dtBase;
                int days = ts.Days;
                switch (days % 4)
                {
                    case 0:
                        if (dt >= new DateTime(dt.Year, dt.Month, dt.Day, 8, 0, 0) && dt < new DateTime(dt.Year, dt.Month, dt.Day, 16, 0, 0))
                            return "丁";
                        else if (dt >= new DateTime(dt.Year, dt.Month, dt.Day, 16, 0, 0) && dt < new DateTime(dt.Year, dt.Month, dt.Day + 1, 0, 0, 0))
                            return "甲";
                        else
                            return "不在值班时间";
                    case 1:
                        if (dt >= new DateTime(dt.Year, dt.Month, dt.Day, 8, 0, 0) && dt < new DateTime(dt.Year, dt.Month, dt.Day, 16, 0, 0))
                            return "乙";
                        else if (dt >= new DateTime(dt.Year, dt.Month, dt.Day, 16, 0, 0) && dt < new DateTime(dt.Year, dt.Month, dt.Day + 1, 0, 0, 0))
                            return "丁";
                        else
                            return "不在值班时间";
                    case 2:
                        if (dt >= new DateTime(dt.Year, dt.Month, dt.Day, 8, 0, 0) && dt < new DateTime(dt.Year, dt.Month, dt.Day, 16, 0, 0))
                            return "丙";
                        else if (dt >= new DateTime(dt.Year, dt.Month, dt.Day, 16, 0, 0) && dt < new DateTime(dt.Year, dt.Month, dt.Day + 1, 0, 0, 0))
                            return "乙";
                        else
                            return "不在值班时间";
                    case 3:
                        if (dt >= new DateTime(dt.Year, dt.Month, dt.Day, 8, 0, 0) && dt < new DateTime(dt.Year, dt.Month, dt.Day, 16, 0, 0))
                            return "甲";
                        else if (dt >= new DateTime(dt.Year, dt.Month, dt.Day, 16, 0, 0) && dt < new DateTime(dt.Year, dt.Month, dt.Day + 1, 0, 0, 0))
                            return "丙";
                        else
                            return "不在值班时间";
                    default:
                        return "";
                }
            }
      

  2.   


    static void Main(string[] args)
    {
        string[] sDay = {"丁","乙","丙","甲"};
        string[] sNight = { "甲", "丁", "乙", "丙" };
        DateTime dt = Convert.ToDateTime("2000/1/1");
        DateTime dn = Convert.ToDateTime("2000/1/5");//在这里输入你想要的时间
        TimeSpan ts = dn - dt;
        int days = ts.Days;
        Console.WriteLine("白班是 " + sDay[days % 4]);
        Console.WriteLine("夜班是 " + sNight[days % 4]);
    }
      

  3.   

    谢谢: ojlovecd 及 nattystyle,马上给分..