当前位置: 首页 > news >正文

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 示例:

表1 ToString() 参数示例
image-20230817225136862
表2 ToString() 用法示例
image-20230817225443895

(五)字符串转 DateTime

​ 字符串想要成功转回 DateTime,那么这个字符串的格式是有要求的。最基本的 ToString() 的转换出来的字符串才能转回去,格式必须如下:
年/月/日 时:分:秒

string str = "1988/5/4 18:00:08";DateTime dt3;
if (DateTime.TryParse(str, out dt3)) { // 尝试转换print(dt3);                        // 此处可以转换成功
}
else {print("转换失败");
}

(六)存储时间

​ 存储时间的方式很多:

  1. 直接存字符串
  2. 直接存 Ticks
  3. 直接存时间戳信息

​ 建议:存储时间戳的形式,更加节约。

三、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 年就是从公元元年开始算起的两千二十二年。 &#xf…...

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秒自动关闭的广告&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"…...

MySQL——基础——外连接

一、外连接查询语法&#xff1a;(实际开发中,左外连接的使用频率要高于右外连接) 左外连接 SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...; 相当于查询表1(左表)的所有数据 包含 表1和表2交集部分的数据 右外连接 SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN …...

spring boot 实现Redisson分布式锁及其读写锁

分布式锁&#xff0c;就是控制分布式系统中不同进程共同访问同一共享资源的一种锁的实现。 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 模型&#xff0c;即在读写数据过程中会发生阻塞现象。当用户线程发出 IO 请求之后&#xff0c;内 核会去查看数据是否就绪&#xff0c;如果没有就绪就会等待数据就绪&#xff0c;而用户线程就会处于阻塞状态&#xff0c;用户线…...

Python学习笔记_基础篇(十一)_socket编程

python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和软件组成的。硬件中的CPU是计算机的核心&#xff0c;它承担计算机的所有任务。 操作系统是运行在硬件之上的软件&#xff0c;是计算机的管理者&#xff0c;它负责资源的管理和分配、任务的调度。 程序是运行…...

C#8.0本质论第三章--更多数据类型

C#8.0本质论第三章–更多数据类型 3.1类型的划分 一个类型要么是值类型&#xff0c;要么是引用类型。区别在于拷贝方式&#xff1a;值类型数据总是拷贝值&#xff1b;引用类型的数据总是拷贝引用。 3.1.1值类型 3.1.2引用类型 引用类型的变量存储对数据存储位置的引用。 3.…...

浅拷贝与深拷贝

作者简介&#xff1a; zoro-1&#xff0c;目前大一&#xff0c;正在学习Java&#xff0c;数据结构等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; 浅拷贝与深拷贝 浅拷贝浅拷贝定义浅拷贝代码演示浅…...

背包 问题

1、背包问题 1.1、01背包 题目&#xff1a; 有n件物品和一个容量为m的背包&#xff0c;第i件物品的体积是v[ i ]&#xff0c;价值是w[ i ]&#xff0c;每件物品只有一件&#xff0c;求在不超过背包容量的前提下&#xff0c;可以放的物品的最大价值是多少 基本思路&#xff…...

Python3与pysoem实战:基于SDO的EtherCAT伺服电机多模式控制

1. 环境准备与基础配置 在开始EtherCAT伺服电机控制之前&#xff0c;我们需要搭建一个稳定的开发环境。我推荐使用Ubuntu 20.04 LTS作为基础系统&#xff0c;这个版本对Python3和网络驱动的支持都非常完善。在实际项目中&#xff0c;我发现普通用户权限往往无法直接操作网卡设备…...

从GUI到Tcl命令:Vivado Report Timing Summary配置选项的完整对照手册(附常用命令模板)

Vivado时序报告GUI与Tcl命令深度对照手册&#xff1a;打造自动化分析工作流 在FPGA设计流程中&#xff0c;时序分析是确保设计满足性能要求的关键环节。Vivado IDE提供了直观的GUI界面用于配置时序报告&#xff0c;但对于追求高效自动化的工程师而言&#xff0c;掌握底层Tcl命令…...

Ubuntu 20.04 LTS下FinalShell安装全攻略(附一键脚本及常见问题解决)

Ubuntu 20.04 LTS下FinalShell终极配置指南&#xff1a;从安装到高阶应用 为什么开发者需要FinalShell&#xff1f; 作为一名长期使用Ubuntu进行远程服务器管理的开发者&#xff0c;我深知一款优秀的SSH工具对工作效率的影响。FinalShell作为跨平台的国产SSH工具&#xff0c;…...

如何用torchtext快速构建文本分类模型?5分钟上手RoBERTa与T5实战教程

如何用torchtext快速构建文本分类模型&#xff1f;5分钟上手RoBERTa与T5实战教程 【免费下载链接】text Models, data loaders and abstractions for language processing, powered by PyTorch 项目地址: https://gitcode.com/gh_mirrors/te/text 想要在PyTorch生态中快…...

gte-base-zh场景应用:电商搜索与客服问答的语义匹配实战

gte-base-zh场景应用&#xff1a;电商搜索与客服问答的语义匹配实战 1. 电商场景中的语义匹配挑战 1.1 搜索不精准的痛点分析 在电商平台上&#xff0c;用户搜索"苹果手机"却看到水果苹果的图片&#xff0c;或者输入"轻薄笔记本"却返回游戏本&#xff0…...

量化模型精度补偿方案:百川2-13B-4bits在OpenClaw复杂推理中的表现提升

量化模型精度补偿方案&#xff1a;百川2-13B-4bits在OpenClaw复杂推理中的表现提升 1. 量化模型的精度挑战与补偿需求 当我第一次尝试将百川2-13B-4bits量化模型接入OpenClaw进行自动化任务处理时&#xff0c;遇到了一个典型问题&#xff1a;在简单的文件整理和网页操作任务中…...

Windows下OpenClaw全流程指南:GLM-4.7-Flash模型接入与自动化测试

Windows下OpenClaw全流程指南&#xff1a;GLM-4.7-Flash模型接入与自动化测试 1. 为什么选择OpenClawGLM-4.7-Flash组合 去年我在处理一个Python数据分析项目时&#xff0c;每天要重复执行十几个脚本并整理结果。当我第三次因为手工操作失误导致数据错乱后&#xff0c;终于决…...

OpenClaw技能扩展指南:为GLM-4.7-Flash添加自定义功能

OpenClaw技能扩展指南&#xff1a;为GLM-4.7-Flash添加自定义功能 1. 为什么需要自定义技能 去年冬天&#xff0c;当我第一次尝试用OpenClaw自动整理电脑上的照片时&#xff0c;发现现有的技能库无法满足我的特殊需求——按照拍摄地点和人物自动分类。这让我意识到&#xff0…...

开源 AI 应用平台实战部署:从零搭建到插件调试避坑指南

1. 开源AI平台部署前的环境准备 在开始部署Dify和AIFlowy之前&#xff0c;环境准备是至关重要的一步。我遇到过不少开发者因为基础环境没配好&#xff0c;导致后续步骤频繁报错的情况。这里分享下Windows和Linux双平台下的实战经验。 对于Dify平台&#xff0c;你需要准备Python…...

AI 大模型落地系列|Eino 组件核心篇:ChatTemplate 为什么不是字符串拼接

声明&#xff1a;本文数据源于官方文档与官方实现&#xff0c;重点参考 ChatTemplate 使用说明。 为什么很多人学 Eino 后&#xff0c;写 Prompt 时还是把 ChatTemplate 用成了字符串拼接&#xff1f;1. ChatTemplate 是什么&#xff0c;不是什么2. 接口虽短&#xff0c;但起的…...