2023-08-17 Untiy进阶 C#知识补充8——C#中的日期与时间
文章目录
- 一、名词概念
- 二、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:本地时间
- 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); // 年、月、日、时、分、秒、毫秒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 示例:
(五)字符串转 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;
相关文章:
2023-08-17 Untiy进阶 C#知识补充8——C#中的日期与时间
文章目录 一、名词概念二、DateTime三、TimeSpan 一、名词概念 (一)格里高利历 格里高利历一般指公元,即公历纪年法。目前我们所说公历,就是格里高利历。 比如 2022 年就是从公元元年开始算起的两千二十二年。 …...
SPSS--如何使用分层分析以及分层分析案例分享
分层分析:将资料按某个或某些需要控制的变量的不同分类进行分层,然后再估计暴露因子与某结局变量之间关系的一种资料分析方法。 分层分析的最重要的用途是评估和控制混杂因子所致的混杂偏倚。通过按混杂因子分层,可使每层内的两个比较组在所控…...
时序数据库influxdb笔记
官方资料 https://docs.influxdata.com/influxdb/v2.7/install/?tLinux https://www.influxdata.com/influxdb/ 安装 1、linux平台下 1)下载 2)解压 3)添加账户( adduser influx) 4)设置目录权限 5…...
8月18日上课内容 Haproxy搭建Web群集
本章结构 课程大纲 Haproxy调度算法 常见的web集群调度器 目前常见的Web集群调度器分为软件和硬件软件 通常使用开源的LVS、Haproxy、Nginx 硬件一般使用比较多的是F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟等 Haproxy应用分析 LVS在企业应用中…...
【高阶数据结构】红黑树详解
文章目录 前言1. 红黑树的概念及性质1.1 红黑树的概念1.2 红黑树的性质1.3 已经学了AVL树,为啥还要学红黑树 2. 红黑树结构的定义3. 插入(仅仅是插入过程)4. 插入结点之后根据情况进行相应调整4.1 cur为红,p为红,g为黑…...
树莓牌4B安装Centos8
准备工作 镜像:https://people.centos.org/pgreco/CentOS-Userland-8-stream-aarch64-RaspberryPI-Minimal-4/ 烧制工具:https://www.raspberrypi.com/software/ 初始化 将上述工具烧制好的SD卡插入树莓派,通电。通过网线将树莓派与电脑连…...
SQL Monitor Crack,PostgreSQL监控的传入复制图表
SQL Monitor Crack,PostgreSQL监控的传入复制图表 现在,您可以在从Estate页面导出的Microsoft Excel报告的摘要标题中看到UTC偏移量。 添加了PostgreSQL监控的传入复制图表。 Microsoft PowerShell API现在支持将使用New-SqlMonitorWindowsHost和New-SqlMonitorin…...
软件测试技术之单元测试—工程师 Style 的测试方法(3)
如何设计单元测试? 单元测试设计方法 单元测试用例,和普通测试用例的设计,没有太多不同,常见的就是等价类划分、边界值分析等。而测试用例的设计其实也是开发者应该掌握的基本技能。 等价类划分 把所有输入划分为若干分类&…...
Ubuntu中安装OpenSSL
文章目录 一、前期准备1.1 压缩包下载1.2 gcc, make等的安装二、安装配置 一、前期准备 1.1 压缩包下载 在安装openssl之前,我们需要下载对应的压缩包 https://www.openssl.org/source/openssl-3.0.1.tar.gz 此压缩包可以选择win上下载后解压再复制到本地虚拟机中…...
CW4-6A-S、CW4-10A-S、CW4-20A-S、CW4-30A-S螺栓式滤波器
CW3L2-3A-S、CW3L2-6A-S、CW3L2-10A-S、CW3L2-20A-S CW3-3A-S、CW3-6A-S、CW3-10A-S、CW3-20A-S、CW3-30A-S CW4EL2-3A-S、CW4EL2-6A-S、CW4EL2-10A-SCW4EL2-20A-S、CW4EL2-30A-S CW4E-3A-S、CW4E-6A-S、CW4E-10A-S、CW4E-20A-S、CW4E-30A-S CW4E-40A-S(001)、CW4E-50A-S(0…...
课程项目设计--项目设计--宿舍管理系统--vue+springboot完成项目--项目从零开始
写在前面: 本文是从项目设计到完成开始写的,本来这个项目基础功能是做完了的,但是之前时间紧张想从头做起了。之前一周写前端后端累死了. 设计是关键,这一篇主讲设计。可能后面会有修改,本人实力有限,学习的也是别人的…...
【Linux】Linux下常用搜索命令及其常用选项小结
0x00 前言 版本信息:Ubuntu 18.04.6 LTS 最后更新日期:2023.8.18 0x01 Linux下常用搜索命令及其常用选项小结 1.find (1)find path -name filename :在指定目录path查找名为filename 文件,文件名可用*匹…...
web APIs-练习五
5秒自动关闭的广告: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"…...
MySQL——基础——外连接
一、外连接查询语法:(实际开发中,左外连接的使用频率要高于右外连接) 左外连接 SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...; 相当于查询表1(左表)的所有数据 包含 表1和表2交集部分的数据 右外连接 SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN …...
spring boot 实现Redisson分布式锁及其读写锁
分布式锁,就是控制分布式系统中不同进程共同访问同一共享资源的一种锁的实现。 1、引入依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.15.5</versio…...
java-IONIO
一、JAVA IO 1.1. 阻塞 IO 模型 最传统的一种 IO 模型,即在读写数据过程中会发生阻塞现象。当用户线程发出 IO 请求之后,内 核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用户线…...
Python学习笔记_基础篇(十一)_socket编程
python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和软件组成的。硬件中的CPU是计算机的核心,它承担计算机的所有任务。 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配、任务的调度。 程序是运行…...
C#8.0本质论第三章--更多数据类型
C#8.0本质论第三章–更多数据类型 3.1类型的划分 一个类型要么是值类型,要么是引用类型。区别在于拷贝方式:值类型数据总是拷贝值;引用类型的数据总是拷贝引用。 3.1.1值类型 3.1.2引用类型 引用类型的变量存储对数据存储位置的引用。 3.…...
浅拷贝与深拷贝
作者简介: zoro-1,目前大一,正在学习Java,数据结构等 作者主页: zoro-1的主页 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 浅拷贝与深拷贝 浅拷贝浅拷贝定义浅拷贝代码演示浅…...
背包 问题
1、背包问题 1.1、01背包 题目: 有n件物品和一个容量为m的背包,第i件物品的体积是v[ i ],价值是w[ i ],每件物品只有一件,求在不超过背包容量的前提下,可以放的物品的最大价值是多少 基本思路ÿ…...
数据恢复全面指南:开源数据救援工具组合实战手册
数据恢复全面指南:开源数据救援工具组合实战手册 【免费下载链接】testdisk TestDisk & PhotoRec 项目地址: https://gitcode.com/gh_mirrors/te/testdisk 数据丢失的噩梦与解决方案 2023年,摄影师小李在一次外景拍摄后误格式化了SD卡&#…...
UNIX文件系统设计:一切皆文件的原理与实践
UNIX 文件系统设计哲学:一切皆文件的深度解析1. 核心设计理念1.1 统一I/O抽象模型UNIX系统最核心的设计原则是提供访问各类输入/输出资源的统一范式。系统将所有I/O资源抽象为"文件"对象,通过同一套API接口暴露给用户空间。这种设计使得开发者…...
新手福音:通过快马平台生成带注释的nap自动化运维脚本快速入门
作为一个刚接触网络自动化运维的新手,第一次看到"深圳网络自动化运维nap"这个概念时,整个人都是懵的。各种专业术语、复杂的协议和库让我望而却步,直到发现了InsCode(快马)平台,才真正找到了入门的好方法。 为什么选择n…...
DXVK解决方案:基于Vulkan的Direct3D兼容层性能优化指南
DXVK解决方案:基于Vulkan的Direct3D兼容层性能优化指南 【免费下载链接】dxvk Vulkan-based implementation of D3D9, D3D10 and D3D11 for Linux / Wine 项目地址: https://gitcode.com/gh_mirrors/dx/dxvk DXVK是一个基于Vulkan的Direct3D 8/9/10/11实现层…...
42-西门子1200伺服控制5轴程序 程序采用1200系列PLC,项目实现以下功能: (1)
42-西门子1200伺服控制5轴程序 程序采用1200系列PLC,项目实现以下功能: (1).三轴机械手联动取放料PTO脉冲定位控制台达B2伺服 (2).台达伺服速度模式应用扭矩模式应用实现收放卷 (3).…...
目标检测损失函数进化史:从IoU到EIoU/SIoU/WIoU,YOLOv8性能提升完全指南
引言在目标检测领域,损失函数的设计直接影响着模型的收敛速度和检测精度。作为YOLOv8等先进检测器的核心组件,边界框回归损失函数经历了从简单到复杂的演进过程。传统的IoU(Intersection over Union)损失虽然直观有效,…...
FastAPI流式响应性能断崖式下跌?3个隐藏内存泄漏点,资深工程师连夜修复的5行关键代码
第一章:FastAPI 2.0 异步 AI 流式响应 面试题汇总FastAPI 2.0 原生强化了对异步流式响应(StreamingResponse)的支持,尤其在大语言模型(LLM)推理、实时 token 生成、语音转文字等 AI 场景中成为高频考点。面…...
从零实现手眼标定:Python+Realsense+JAKA实战与四元数、欧拉角、旋转矩阵转换详解
1. 手眼标定基础概念与实战准备 手眼标定是机器人视觉引导中的核心环节,简单来说就是确定相机"眼睛"和机械臂"手"之间的相对位置关系。想象一下,当你闭着眼睛摸鼻子时,大脑需要知道手和鼻子的相对位置——机器人系统同样…...
双模型协作:OpenClaw同时调用GLM-4.7-Flash与Coder模型实战
双模型协作:OpenClaw同时调用GLM-4.7-Flash与Coder模型实战 1. 为什么需要双模型协作? 在我的日常开发工作中,经常遇到这样的场景:需要先理解一个复杂需求(比如"帮我写个爬虫抓取知乎热榜并分析关键词"&am…...
Label Studio实战:如何为NLP项目自定义标注模板(含模板代码分享)
Label Studio实战:如何为NLP项目自定义标注模板(含模板代码分享) 在自然语言处理项目中,数据标注的质量往往直接决定模型性能的上限。Label Studio作为当前最主流的开源标注工具之一,其灵活的自定义模板功能让NLP工程师…...
