四川建设行业数据共享平台的网站,广州市建设招标管理办公室网站,页面设计span,教学类网站怎么做文章目录 一、名词概念二、DateTime三、TimeSpan 一、名词概念
#xff08;一#xff09;格里高利历
格里高利历一般指公元#xff0c;即公历纪年法。目前我们所说公历#xff0c;就是格里高利历。
比如 2022 年就是从公元元年开始算起的两千二十二年。
#xf… 文章目录 一、名词概念二、DateTime三、TimeSpan 一、名词概念
一格里高利历
格里高利历一般指公元即公历纪年法。目前我们所说公历就是格里高利历。
比如 2022 年就是从公元元年开始算起的两千二十二年。
二格林尼治时间 (GMT)
格林尼治标准时间是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间因为本初子午线被定义在通过那里的经线。
地球每天的自转是有些不规则的而且正在缓慢减速所以格林尼治时间已经不再被作为标准时间使用。现在的标准时间——协调世界时UTC。
三协调世界时 (UTC)
又称世界统一时间、世界标准时间、国际协调时间。
UTC 协调世界时即格林尼治平太阳时间是指格林尼治所在地的标准时间也是表示地球自转速率的一种形式。
UTC 基于国际原子时间通过不规则的加入闰秒来抵消地球自转变慢的影响是世界上调节时钟和时间的主要时间标准。
四时间戳
从 1970 年 1 月 1 日UNIX 时间戳的起点时间到现在的时间。
计算机时间和众多的编程语言的时间都是从 1970 年 1 月 1 日开始算起是因为很多编程语言起源于 UNIX 系统而 UNIX 系统认为 1970 年 1 月 1 日 0 点是时间纪元。
所以我们常说的 UNIX 时间戳是以 1970 年 1 月 1 日 0 点为计时起点时间的。 原因 最初计算机操作系统是 32 位而时间也是用 32 位表示。32 位能代表的最大十进制数是 2147483647。1 年总秒数是 3153 6000那么 2147483647 / 3153 6000 68.1 年。 也就是说因为早期用 32 位来表示时间最大的时间间隔是 68 年而最早出现的 UNIX 操作系统考虑到计算机产生的年代和应用的时限综合取了 1970 年 1 月 1 日作为 UNIX TIME 的纪元时间开始时间。 二、DateTime
命名空间System
DateTime 是 C# 提供给我们处理日期和时间的结构体。
DateTime 对象的默认值和最小值是 0001 年 1 月 1 日 00:00:00午夜最大值可以是 9999 年 12 月 31 日晚上 11:59:59
一初始化
public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond);
次要参数 DateTimeKind日期时间种类 Local本地时间UtcUTC 时间Unspecified不指定 Calendar日历 使用哪个国家的日历一般在 Unity 开发中不使用。
DateTime dt new DateTime(2022, 12, 1, 13, 30, 45, 500);print(dt.Year - dt.Month - dt.Day - dt.Hour - dt.Minute - dt.Second - dt.Millisecond); // 年、月、日、时、分、秒、毫秒print(dt.Ticks); // 以格里高利历 00:00:00.000 年 1 月 1 日以来的 100 纳秒间隔数表示一般是一个很大的数字print(dt.DayOfYear); // 一年的第多少天print(dt.DayOfWeek); // 星期几二获取时间
DateTime nowTime DateTime.Now;
print(nowTime.Minute); // 返回今日日期DateTime nowTime2 DateTime.Today;
print(nowTime2.Year - nowTime2.Month - nowTime2.Day); // 返回当前 UTC 日期和时间三计算时间
// 各种加时间
DateTime nowTime3 nowTime.AddDays(-1);
print(nowTime3.Day);四字符串输出
// 默认输出格式
print(nowTime.ToString()); // 2023/8/17 22:55:35
print(nowTime.ToShortTimeString()); // 22:55
print(nowTime.ToShortDateString()); // 2023/8/17
print(nowTime.ToLongTimeString()); // 22:55:35
print(nowTime.ToLongDateString()); // 2023年8月17日// 自定义输出格式
print(nowTime.ToString(D)); // 2023年8月17日
print(nowTime.ToString(yyyy-MM-dd-ddd/HH-mm-ss)); // 2023-08-17-周四/22-55-35 自定义输出格式参照表 1 与表 2 示例
表1 ToString() 参数示例 表2 ToString() 用法示例 五字符串转 DateTime
字符串想要成功转回 DateTime那么这个字符串的格式是有要求的。最基本的 ToString() 的转换出来的字符串才能转回去格式必须如下 年/月/日 时:分:秒
string str 1988/5/4 18:00:08;DateTime dt3;
if (DateTime.TryParse(str, out dt3)) { // 尝试转换print(dt3); // 此处可以转换成功
}
else {print(转换失败);
}六存储时间
存储时间的方式很多
直接存字符串直接存 Ticks直接存时间戳信息
建议存储时间戳的形式更加节约。
三、TimeSpan
命名空间System
TimeSpan 是 C# 提供给我们的时间跨度结构体用两个 DateTime 对象相减可以得到 TimeSpan 对象。
public TimeSpan(int days, int hours, int minutes, int seconds, int milliseconds);
TimeSpan ts DateTime.Now - new DateTime(1970, 1, 1);print(ts.TotalMinutes); // 总分钟
print(ts.TotalSeconds); // 总秒数
print(ts.TotalDays); // 总天数
print(ts.TotalHours); // 总小时数
print(ts.Ticks); // 总 Ticks即多少个 100 nsprint(ts.Days - ts.Hours - ts.Minutes - ts.Seconds - ts.Milliseconds); // 19586-22-55-35-19一时间计算
TimeSpan ts2 new TimeSpan(1, 0, 0, 0);
DateTime timeNow DateTime.Now ts2;TimeSpan ts3 new TimeSpan(0, 1, 1, 1);
TimeSpan ts4 ts2 ts3;
print(ts4.Days - ts4.Hours); // 1-1二Ticks 转 Seconds
long seconds ts4.Ticks / TimeSpan.TicksPerSecond; // 自带常量方便用于和 ticks 进行计算三存储时间
// 用当前时间加上 2 天再减去 1970 年 1 月 1 日的时间。得到时间差
TimeSpan time DateTime.Now.AddDays(2) - new DateTime(1970, 1, 1);// 再将该时间差转换为秒便得到最终的时间戳只需要存储该 long 变量即可
long timeStamp (long)(time.Ticks / TimeSpan.TicksPerSecond);// 由于时间戳的单位为秒将其乘以转换常量转为为 ticks 的单位
TimeSpan time2 new TimeSpan(timeStamp * TimeSpan.TicksPerSecond);// 再用 1970 年 1 月 1 日 该时间跨度即可
DateTime date new DateTime(1970, 1, 1) time2; 每次打开面板时计算目标时间和当前时间的秒数差在面板中对显示内容进行更新。
注意不要在更新函数中不停用 DateTime.Now 来计算浪费性能。只需要在面板打开时计算一次时间差之后 用该时间差进行计算即可
long seconds (long)(date - DateTime.Now).TotalSeconds;