C#中日期和时间的处理

目录

前言

时间对于我们的作用

一些关于时间的名词说明

格里高利历

格林尼治时间(GMT)

协调世界时(UTC)

时间戳

DateTime

初始化

获取时间

计算时间 

字符串转DateTime

存储时间 

TimeSpan

初始化它来代表时间间隔 

 用它相互计算

 自带常量方便用于和ticks进行计算

总结


前言

        在C#编程环境中,日期和时间的处理是编程任务中不可或缺的一部分。无论是构建企业级应用、游戏开发,还是进行数据分析,准确地处理日期和时间都是确保程序稳定性和用户体验的关键。C#语言提供了强大的日期和时间处理功能,使得开发者能够高效地处理各种日期和时间相关的需求。

时间对于我们的作用

在游戏开发当中我们经常会有和时间打交道的内容
比如每日签到、活动倒计时、建造时间、激活时间等等的功能
如果想要完成这些功能,仅仅用Unity提供给我们的Time类是远远不够用的
所以我们需要学习专门的日期和时间相关的知识
才能制作某些功能需求
而C#便提供了对应的结构方便我们处理时间相关逻辑

1.DateTime 日期结构体
2.TimeSpan 时间跨度结构体


一些关于时间的名词说明

1s秒 = 1000ms毫秒
1ms毫秒 = 1000μs微妙
1μs微妙 = 1000ns纳秒

格里高利历

格里高利历一般指公元
公元,即公历纪年法
目前我们所说公历,就是格里高利历
比如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年是365天,总秒数是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

初始化

主要参数:

年、月、日、时、分、秒、毫秒
ticks:以格里高利历00: 00:00.000年1月1日以来的100纳秒间隔数表示,一般是一个很大的数字

次要参数:

DateTimeKind:日期时间种类
Local:本地时间
Utc:UTC时间
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);

//以格里高利历00:00:00.000年1月1日以来的100纳秒间隔数表示,一般是一个很大的数字
print(dt.Ticks);

//一年的第多少天
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 nowTimeUTC = DateTime.UtcNow;

计算时间 

//各种加时间
DateTime nowTime3 = nowTime.AddDays(-1);
print(nowTime3.Day);

字符串转DateTime

字符串想要转回DateTime成功的话 
那么这个字符串的格式是有要求的 一定是最基本的 toString的转换出来的字符串才能转回去
年/月/日 时:分:秒

string str = nowTime.ToString();
str = "1988/5/4 18:00:08";
print(str);
DateTime dt3;
if(DateTime.TryParse(str, out dt3))
{
    print(dt3);
}
else
{
    print("转换失败");
}

存储时间 

存储时间 方式很多
1.以直接存字符串
2.可以直接存Ticks
3.可以直接存时间戳信息

存储时间戳的形式 更加节约

TimeSpan

命名空间:System
TimeSpan 是 C# 提供给我们的时间跨度结构体
用两个DateTime对象相减 可以得到该对象

TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1);
print(ts.TotalMinutes);
print(ts.TotalSeconds);
print(ts.TotalDays);
print(ts.TotalHours);
print(ts.Ticks);

print(ts.Days + "-" + ts.Hours + "-" + ts.Minutes + "-" + ts.Seconds + "-" + ts.Milliseconds);

初始化它来代表时间间隔 

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);

 自带常量方便用于和ticks进行计算

print(ts4.Ticks / TimeSpan.TicksPerSecond);


总结

        在游戏开发中,合理使用DateTime和TimeSpan结构体可以高效地处理各种日期和时间需求。了解它们的初始化、属性和方法,以及它们之间的关系和转换,是掌握C#中日期和时间处理的关键。同时,根据具体需求选择合适的存储方式,也是实现高效时间处理的重要一环。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/912416.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pdb和gdb的双剑合璧,在python中调试c代码

左手编程,右手年华。大家好,我是一点,关注我,带你走入编程的世界。 公众号:一点sir,关注领取python编程资料 问题背景 正常情况下,调试python代码用pdb,调试c代码用gdb,…

【Apache ECharts】<农作物病害发生防治面积>

在vs Code里打开, 实现 1. 首先引入 echarts.min.js 资源 2. 在body部分设一个 div,设置 id 为 main 3. 设置 script 3.1 基于准备好的dom,初始化echarts实例 var myChart echarts.init(document.getElementById(main)); 3.2 指定图表的…

Docker + Jenkins + gitee 实现CICD环境搭建

目录 前言 关于Jenkins 安装Jenkins docker中运行Jenkins注意事项 通过容器中的Jenkins,把服务打包到docker进行部署 启动Jenkins 创建第一个任务 前言 CI/CD(持续集成和持续交付/持续部署),它可以实现自动化的构建、测试和部署…

Leetcode 买卖股票的最佳时机 Ⅱ

使用贪心算法来解决此问题,通过在价格上涨的每一天买入并在第二天卖出的方式,累计所有上涨的利润,以实现最大收益。关键点是从第二天开始遍历,并且只要当前比前一天价格高,我们就在前一天买入然后第二天卖出去。下面是…

【Linux系列】命令行中的文本处理:从中划线到下划线与大写转换

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

使用Docker快速部署FastAPI Web应用

Docker是基于 Linux 内核的cgroup、namespace以及 AUFS 类的Union FS 等技术,对进程进行封装隔离,一种操作系统层面的虚拟化技术。Docker中每个容器都基于镜像Image运行,镜像是容器的只读模板,容器是模板的一个实例。镜像是分层结…

【go从零单排】迭代器(Iterators)

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 语言中,迭代器的实现通常不是通过语言内置的迭代器类型&#x…

C语言--结构体的大小与内存对齐,位段详解

一.前言 为了保证文章的质量和长度,小编将会分两篇介绍,思维导图如下,上篇已经讲过了概念部分,本文主要讲解剩余部分,希望大家有所收获🌹🌹 二.结构体的大小与内存对齐 2.1 存在对齐的原因 平…

UnicodeDecodeError: ‘utf-8‘ codec can‘t decode bytes ... - python 报错解决方案

背景 加载数据集突然出问题, 详细报错为:UnicodeDecodeError: utf-8 codec cant decode bytes in position 606-607: invalid continuation byte 解决方案 源文件另存 UTF-8 版的 csv。 即可运行:

MQTT协议解析 : 物联网领域的最佳选择

1. MQTT协议概述 1.1 MQTT协议是什么 MQTT : Message Queuing Telemetry Transport 模式 : 发布 / 订阅主题优点 : 代码量小、低带宽、实时可靠应用 : 物联网、小型设备、移动应用MQTT 常用端口 : 1883 MQTT是一个网络协议,和HTTP类似,因为轻量简单&…

快速入门Zookeeper

Zookeeper ZooKeeper作为一个强大的开源分布式协调服务,扮演着分布式系统中至关重要的角色。它提供了一个中心化的服务,用于维护配置信息、命名、提供分布式同步以及提供组服务等。通过其高性能和可靠的特性,ZooKeeper能够确保在复杂的分布式…

「Mac玩转仓颉内测版1」入门篇1 - Cangjie环境的搭建

本篇详细介绍在Mac系统上快速搭建Cangjie开发环境的步骤,涵盖VSCode的下载与安装、Cangjie插件的离线安装、工具链的配置及验证。通过这些步骤,确保开发环境配置完成,为Cangjie项目开发提供稳定的基础支持。 关键词 Cangjie开发环境搭建VSC…

从0开始学习机器学习--Day20--优化算法的思路

确定执行的优先级(Prioritizing what to work on : Spam classification example) 在建立学习系统前,我们不仅要梳理框架,更重要的是我们要弄清楚有哪些事情是要优先做的,这可以帮我们节约大量的时间。 以垃圾邮件为例,按照之前…

H5播放器EasyPlayer.js 流媒体播放器是否支持npm(yarn) install 安装?

EasyPlayer.js H5播放器是一款功能强大的H5视频播放器,它支持多种流媒体协议播放,包括WebSocket-FLV、HTTP-FLV、HLS(m3u8)、WebRTC等格式的视频流。它不仅支持H.264和H.265编码格式,还具备实时录像、低延时直播等功能…

SpringCloud篇(微服务)

目录 一、认识微服务 1. 单体架构 2. 分布式架构 3. 微服务 3.1. 特点 3.2. 优点 3.3 缺点 二、微服务设计、拆分原则 1. AKF 拆分原则 2. Y轴(功能)关注应用中功能划分,基于不同的业务拆分 3. X轴(水平扩展&#xff09…

【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(下)

系列文章目录 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(上) 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(下) 【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(上) 【…

ts 如何配置引入 json 文件

ts 如何配置引入 json 文件 参考文档: https://maxgadget.dev/article/how-to-import-a-json-file-in-typescript-a-comprehensive-guide 项目中有一个 .json 的文件是配置文件,如何引入到 ts 项目中 配置 tsconfig.json 文件,添加这两个 {…

Jenkins找不到maven构建项目

有的可能没有出现maven这个选项 解决办法:需要安装Maven项目插件 输入​Maven Integration plugin​

解决 “Error: listen EACCES: permission denied 0.0.0.0:80“ 错误

前言 在开发过程中,我们经常会遇到各种各样的错误。其中一个常见的错误是 Error: listen EACCES: permission denied 0.0.0.0:80。这个错误通常发生在尝试启动一个开发服务器时,服务器试图绑定到80端口,但由于权限不足而失败。本文将详细介绍…

华为2288HV2服务器安装BCLinux8U6无法显示完整安装界面的问题处理

本文记录了华为2288HV2服务器安装BCLinux8U6无法显示完整安装界面,在安装过程中配置选择时,右侧安装按钮不可见,导致安装无法继续的问题处理过程。 一、问题现象 华为2288HV2服务器安装BCLinux8U6时无法显示完整的安装界面,问题…