C#控制台-计算当前时间占比和获取时间

大家在使用C#进行编程时,总会遇到,一些实时显示刷新时间的项目,但是呢,许多刚接触C#的小白简直是噩梦,尤其vb.net教程使用WPF时,又没有Timer控件,好不容易找到了显示时间代码,发现只能显示一次最新读取的时间,这里演示控制台程序窗体或者wpf应用会在接下来的文章中讲述:

在此演示的时间操作与html的时间逻辑相似,个人主页c#教程上的时间以及时间百分比都是通过这个C#程序进行2次开发和编程的,html版的获取时间将会写在博客专题中,择日再进行搬移.

获取本地时间的代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Timers.Timer t = new System.Timers.Timer();
            t.Interval = 1000;    //刷新时间
            t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed);
            t.Start();
            Console.ReadKey();
        }
        static void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            Console.Write("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");    //\b代表退格符,与\u0008匹配
            Console.Write(DateTime.Now.ToString("yyyy-dd-MM HH:mm:ss"));  //y表示年,d表示月,m表示日,h表示小时,m表示时间,s表示秒,在html中也可以使用这个格式.
        }
    }
}
 

上次在某个手机app上看到有当前时间的占比情况,这个是个很好的idea,但可惜那个app上的算法是错的(偷笑),它的算法是:

当前时间 ÷ 一天24小时 = 当前时间的占比

但当到了凌晨0点-凌晨1点的时候,速度是不正常且有偏差的所以经过多次和一位数学大佬商讨演算后,公式如下

(((小时3600)+ (分钟60) + (秒))/864)

话不多说直接上源码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace timenow
{
    class Program
    {
        /// 判断当前时间过了今天的百分之多少
        /// 
        /// 
        static double DayTimePassed()
        {
            DateTime dt = DateTime.Now;
            double Numerator = dt.Hour * 60 * 60 + dt.Minute * 60 + dt.Second;
            double Denominator = 24 * 60 * 60;
            return Numerator / Denominator;
        }
        /// 
        /// 判断指定时间过了当日的百分之多少
        /// 
        /// 
        /// 
        static double DayTimePassed(DateTime dt)
        {
            double Numerator = dt.Hour * 60 * 60 + dt.Minute * 60 + dt.Second;
            double Denominator = 24 * 60 * 60;
            return Numerator / Denominator;
        }
        static void Main(string[] args)
        {
            System.Timers.Timer t = new System.Timers.Timer();
            t.Interval = 1000;
            t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed);
            t.Start();
            Console.ReadKey();


        }
        static void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            Console.Clear();//刷新屏幕
            Console.WriteLine(DateTime.Now.ToString());
            Console.WriteLine("Day: " + DayTimePassed().ToString("P"));
            Console.WriteLine("Day: " + DayTimePassed(DateTime.Now).ToString("P"));
            Console.ReadLine();

        }

    }
}

两种方式有共通之处,在使用中取决于是否需要调用内部数据或是直接输出时间.(也希望那家app厂商进行改进吧 (‾◡◝))

EOF

本文作者:torwen
本文链接:https://www.cnblogs.com/torwen/p/13125648.html

你可能感兴趣的:(C#教程,c#)