C#对时间进行排序

时间:2012-07-06 03:32:57

标签: c# time delay minute

我想创建一个这样的程序。
对于每一分钟,时间应以格式打印 h:m
每5分钟打印一次“休息”,这应该持续24小时。 像这样

0:0
0:1个
0:2个
0:3个
0:4个
打破
0:6个
0:7个
0:8个
0:9个
打破
0:11



23:59

我带来了解决它的程序..但我从未使用DateTime或任何时间功能,我只是使用Thread.Sleep每次打印1分钟... 我想使用除Thread.Sleep之外的其他方法来解决它... 所以请指导我..(对不起我的坏英语)


这就是我对Thread.Sleep的处理方式 请提供给我任何其他解决方案

using System;
using System.Threading;

class try22
{
    public static void Main()
    {
        for(int i=0;i<24;i++)
        {
            for(int j=0;j<60;j++)
            { 
                if(j%5 != 0 || (j == 0 && i == 0))
                {
                    Thread.Sleep(20);        
                    Console.WriteLine(i+":"+j);
                }
                else if(j%5 == 0 )
                {
                    Thread.Sleep(20);
                    Console.WriteLine("break");
                }
            }
        }
     }
}




谢谢你们,我想出了在我的问题中使用实际日期而不是数组编号的解决方案

我得到奇怪的错误与计时器.. :(所以我用thread.sleep itslef

using System;
using System.Threading;

class try22
{
    public static void Main()
    { 
        DateTime dt1 = new DateTime();
        dt1 = DateTime.ParseExact("0:0", "H:m",null);
        int cford=dt1.Day+1;
        for (; dt1.Day!=cford; )
        {
           dt1 = addm(dt1);
           Console.WriteLine(dts(dt1));
           Thread.Sleep(60000);
        }
    }
    public static string dts(DateTime dt)
    {

        string tmp = dt.ToString("H:m");
        if (dt.Minute % 5 == 0)
            return "BREAK";
        else
            return tmp;
    }
    public static DateTime addm(DateTime dt)
    {
        return dt.AddMinutes(1);
    }
}

3 个答案:

答案 0 :(得分:1)

您要求的是哪一个?

  1. 每分钟显示一次当前时间
  2. 在每分钟开始时显示当前时间,如闹钟
  3. 假设1,这里有一些正确方向的提示(无论哪种方式都应该有用):

    1. 您可以使用DateTime.Now
    2. 将当前日期和时间作为DateTime对象获取
    3. DateTime个对象可以使用.ToString("format")返回自定义字符串输出。
    4. 使用custom date and time format string指定格式。例如,要在24小时内获取当前小时(不带前导零),您可以使用DateTime.Now.ToString("H")
    5. 根据reference,您可以在格式中包含字符串文字(未处理的字符串)。例如,DateTime.Now.ToString("'Hour is: 'H")将返回Hour is: 6
    6. 您可以使用DateTimeint对象的“分钟”值作为.Minute。例如,int minute = DateTime.Now.Minute;
    7. 如果您想要定期运行某些代码,一种方法是将其移动到自己的方法中,然后像这样设置System.Threading.Timer

      void SomeMethod(object state) { /* DO STUFF HERE */ }
      
      // Initialise the timer in your main() method 
      // As per MSDN for System.Threading.Timer, first number (0) is start delay.
      // Second number (60000) is interval in milliseconds (60 seconds)
      // This will cause SomeMethod to be called once every 60 seconds starting now.
      Timer timer = new Timer(new TimerCallback(SomeMethod), null, 0, 60000);
      
    8. 您需要在制作Timer之后立即停止您的应用程序退出(否则它将无法运行)。在命令行应用程序中执行此操作的一种简单方法是在Console.Read()方法的末尾放置Main(),等待用户输入。

答案 1 :(得分:1)

我用过Timer而不是Thread

 class Program
    {
        private static System.Timers.Timer aTimer;
        static int j = 0;
        static int i = 0;
        public static void Main()
        {         
            // Create a timer with a Minute interval.
            aTimer = new System.Timers.Timer(60000);

            // Hook up the Elapsed event for the timer.
            aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

            // Set the Interval to 1 Minute (60000 milliseconds).
            aTimer.Interval = 60000;
            aTimer.Enabled = true;

            Console.WriteLine("Press the Enter key to exit the program.");
            Console.WriteLine(0 + ":" + 0);
            Console.ReadLine();
        }

        // Specify what you want to happen when the Elapsed event is 
        // raised.
        private static void OnTimedEvent(object source, ElapsedEventArgs e)
        {            
            j++;
            if (j == 60)
            {
                Console.WriteLine("break");
                j = 1;
                i = i + 1;
            }
            if (i == 24)
            {
                i = 0;
            }

            if (j % 5 != 0 || (j == 0))
            {                              
                Console.WriteLine(i + ":" + j);
            }
            else if (j % 5 == 0)
            {
                Console.WriteLine("break");
            }
        }
    }

答案 2 :(得分:0)

我不确定您希望使用实际系统时间开始的天气,或者仅仅是程序执行开始后的时间。解决方案我发布自程序启动以来的使用时间。

using System;
using System.Collections.Generic;
using System.Text;
using System.Timers;
namespace ConsoleApplication1
{
   class Program
 {
    TimeSpan tt;
    static void Main(string[] args)
    {
        Program p = new Program();
        System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(p.run));
        t.Start();
        while (true) ;
    }

    void run()
    {
        tt=new TimeSpan(0,1,0);
        //Timer interval decides when even will be fired.
        Timer t = new Timer(60000);
        t.AutoReset = true;
        t.Elapsed += new ElapsedEventHandler(t_Elapsed);
        t.Start();

    }

    public void t_Elapsed(object sender, EventArgs e)
    {

        if (tt.Minutes % 5 == 0)
            Console.WriteLine("Break");
        Console.WriteLine(tt.Hours.ToString()+":"+tt.Minutes.ToString());
        tt = tt.Add(new TimeSpan(0, 1, 0));
    }
}
}