C# 时间计算(一)

news2024/9/24 15:25:57

目录

一、概述

二、时间的基本用法

1.实例化 DateTime

2.获取当前的时间

3.获取当前时间的时分秒

三、格式化时间

1.将时间转换为特定字符串

1)拼接字符串方式

2)格式化字符串方式

2.将字符串转换为时间

1)DateTime.Parse

2)DateTime.TryParse

3)DateTimeOffset.Parse

4)DateTimeOffset.TryParse

四、时间的加减运算

结束


一、概述

在 C# 中,DateTime 用于处理日期和时间的内置类,其值范围为 00:00:00 (午夜) , 0001年1月1日,安诺·多米尼 (公历) 年12月31日晚上11:59:59 (公历 ) 。

时间值以 100 纳秒为单位进行测量,称为刻度。 特定日期是自 A.0001 年 1 月 1 日午夜 12:00 以来的时钟周期数, (日历中的 GregorianCalendar C.E.) 。 该数字不包括按闰秒添加的刻度。 例如,刻度值为 31241376000000000L 表示星期五,0100 年 1 月 1 日 12:00:00 午夜。 DateTime 值始终在显式或默认日历的上下文中表示。

下面是 DateTime 的一些常用方法,其实 DateTime 远比这些基础的内容复杂,有需要的参考微软官方的文档。

时间比较,时间数据转换,时间间隔计算,获取网络时间,时间戳,时区时间 在文章的第二篇

C# 时间计算(二)-CSDN博客

二、时间的基本用法

1.实例化 DateTime

可以根据 年,月,日,小时,分钟,秒,毫秒 来实例化一个新的 DateTime,例:

DateTime dt = new DateTime(2023, 11, 22, 10, 23, 10, 45);

也可以只定义一个年,月,日就可以

DateTime dt = new DateTime(2023, 11, 22);

如果不进行实例化,那么时间默认就是 0001/1/1 0:00:00

代码 :

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

namespace Test2
{
    internal class Program
    {
        static DateTime dt;
        static void Main(string[] args)
        {
            Console.WriteLine(dt);
            Console.ReadKey();
        }
    }
}

运行:

关于 DateTime 的构造函数,可以参考微软的官方文档,下面的截图只是其中的一部分。

微软官方文档:点击跳转

2.获取当前的时间

使用代码 DateTime.Now 来获取当前时间。

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

namespace Test2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            DateTime dt = DateTime.Now;
            Console.WriteLine(dt);
            Console.ReadKey();
        }
    }
}

运行:

3.获取当前时间的时分秒

在上节中,介绍了怎么获取当前时间,在获取到 DateTime 的值后,就可以根据 DateTime 来获取当前时间的日期,时,分,秒,毫秒 等

代码:

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

namespace Test2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            DateTime dt = DateTime.Now;
            Console.WriteLine("年:{0}", dt.Year);
            Console.WriteLine("月:{0}", dt.Month);
            Console.WriteLine("日:{0}", dt.Day);
            Console.WriteLine("分:{0}", dt.Minute);
            Console.WriteLine("毫秒:{0}", dt.Millisecond);
            Console.ReadKey();
        }
    }
}

运行:

三、格式化时间

1.将时间转换为特定字符串

如果将 DateTime.Now 直接转换为字符串,那么格式就如下图所示:

现在有几个问题,如果要将当前的时间写入数据库,那么上图的格式部分数据库是不支持的,也有软件需求,要求指定的时间格式,比如 2023.11.24 14:40:23 ,遇到这种需求我们就不得不改代码了,在这里有两种解决方案。

1)拼接字符串方式

在上面的章节中,不是讲了怎样获取 DateTime 的时、分、秒么,那我们用字符串拼接一下就好了,代码如下:

namespace Test2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            DateTime dt = DateTime.Now;
            string time1 = $"{dt.Year}.{dt.Month}.{dt.Day} {dt.Hour}:{dt.Minute}:{dt.Second}";
            Console.WriteLine(time1);
            Console.ReadKey();
        }
    }
}

运行:

效果是有了,但是这样写十分的麻烦,代码量又多,下面我来介绍更简单的方法

2)格式化字符串方式

上节的问题,微软当然也会考虑到,在 DateTime 的 ToString 方法,就是用来解决这个问题的,代码如下:

namespace Test2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string time = DateTime.Now.ToString("yyyy.mm.dd hh:mm:ss:ffff");
            Console.WriteLine(time);
            Console.ReadKey();
        }
    }
}

运行:

具体需要什么格式,其实自己随便定义,比如下面这种方式

namespace Test2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string time = DateTime.Now.ToString("yyyy-mm-dd hh:mm:ss");
            Console.WriteLine(time);
            Console.ReadKey();
        }
    }
}

运行:

或者你只需要年、月、日,或者只要 小时、分钟,秒 那也是可以的

namespace Test2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string time = DateTime.Now.ToString("yyyy-mm-dd");
            Console.WriteLine(time);
            Console.ReadKey();
        }
    }
}

运行:

具体的说明文档,或者参考官方地址:点击跳转

格式说明符说明示例
"d"一个月中的某一天(1 到 31)。

 
2009-06-01T13:45:30 -> 1

2009-06-15T13:45:30 -> 15
“dd”一个月中的某一天(01 到 31)。

 
2009-06-01T13:45:30 -> 01

2009-06-15T13:45:30 -> 15
“ddd”一周中某天的缩写名称。

 
2009-06-15T13:45:30 -> Mon (en-US)

2009-06-15T13:45:30 -> Пн (ru-RU)

2009-06-15T13:45:30 -> lun. (fr-FR)
“dddd”一周中某天的完整名称。

 
2009-06-15T13:45:30 -> Monday (en-US)

2009-06-15T13:45:30 -> понедельник (ru-RU)

2009-06-15T13:45:30 -> lundi (fr-FR)
“f”日期和时间值的十分之几秒。

 
2009-06-15T13:45:30.6170000 -> 6

2009-06-15T13:45:30.05 -> 0
“ff”日期和时间值的百分之几秒。

 
2009-06-15T13:45:30.6170000 -> 61

2009-06-15T13:45:30.0050000 -> 00
“fff”日期和时间值的千分之几秒。

 
6/15/2009 13:45:30.617 -> 617

6/15/2009 13:45:30.0005 -> 000
“ffff”日期和时间值的万分之几秒。

 
2009-06-15T13:45:30.6175000 -> 6175

2009-06-15T13:45:30.0000500 -> 0000
“fffff”日期和时间值的十万分之几秒。

 
2009-06-15T13:45:30.6175400 -> 61754

6/15/2009 13:45:30.000005 -> 00000
“ffffff”日期和时间值的百万分之几秒。

 
2009-06-15T13:45:30.6175420 -> 617542

2009-06-15T13:45:30.0000005 -> 000000
“fffffff”日期和时间值的千万分之几秒。

 
2009-06-15T13:45:30.6175425 -> 6175425

2009-06-15T13:45:30.0001150 -> 0001150
“F”如果非零,则为日期和时间值的十分之几秒。

 
2009-06-15T13:45:30.6170000 -> 6

2009-06-15T13:45:30.0500000 ->(无输出)
“FF”如果非零,则为日期和时间值的百分之几秒。

 
2009-06-15T13:45:30.6170000 -> 61

2009-06-15T13:45:30.0050000 ->(无输出)
“FFF”如果非零,则为日期和时间值的千分之几秒。

 
2009-06-15T13:45:30.6170000 -> 617

2009-06-15T13:45:30.0005000 ->(无输出)
“FFFF”如果非零,则为日期和时间值的万分之几秒。

 
2009-06-15T13:45:30.5275000 -> 5275

2009-06-15T13:45:30.0000500 ->(无输出)
“FFFFF”如果非零,则为日期和时间值的十万分之几秒。

 
2009-06-15T13:45:30.6175400 -> 61754

2009-06-15T13:45:30.0000050 ->(无输出)
“FFFFFF”如果非零,则为日期和时间值的百万分之几秒。

 
2009-06-15T13:45:30.6175420 -> 617542

2009-06-15T13:45:30.0000005 ->(无输出)
“FFFFFFF”如果非零,则为日期和时间值的千万分之几秒。

 
2009-06-15T13:45:30.6175425 -> 6175425

2009-06-15T13:45:30.0001150 -> 000115
“g”、“gg”时期或纪元。

 
2009-06-15T13:45:30.6170000 -> A.D.
“h”采用 12 小时制的小时(从 1 到 12)。

 
2009-06-15T01:45:30 -> 1

2009-06-15T13:45:30 -> 1
“hh”采用 12 小时制的小时(从 01 到 12)。

 
2009-06-15T01:45:30 -> 01

2009-06-15T13:45:30 -> 01
“H”采用 24 小时制的小时(从 0 到 23)。

 
2009-06-15T01:45:30 -> 1

2009-06-15T13:45:30 -> 13
“HH”采用 24 小时制的小时(从 00 到 23)。

 
2009-06-15T01:45:30 -> 01

2009-06-15T13:45:30 -> 13
“K”时区信息。

 
带 DateTime 值:

2009-06-15T13:45:30, Kind Unspecified ->

2009-06-15T13:45:30, Kind Utc -> Z

2009-06-15T13:45:30, Kind Local -> -07:00(取决于本地计算机的设置)

带DateTimeOffset 值:

2009-06-15T01:45:30-07:00 --> -07:00

2009-06-15T08:45:30+00:00 --> +00:00
“m”分钟(0 到 59)。

 
2009-06-15T01:09:30 -> 9

2009-06-15T13:29:30 -> 29
“mm”分钟(00 到 59)。

 
2009-06-15T01:09:30 -> 09

2009-06-15T01:45:30 -> 45
“M”月份(1 到 12)。

 
2009-06-15T13:45:30 -> 6
“MM”月份(01 到 12)。

 
2009-06-15T13:45:30 -> 06
“MMM”月份的缩写名称。

 
2009-06-15T13:45:30 -> Jun (en-US)

2009-06-15T13:45:30 -> juin (fr-FR)

2009-06-15T13:45:30 -> Jun (zu-ZA)
“MMMM”月份的完整名称。

 
2009-06-15T13:45:30 -> June (en-US)

2009-06-15T13:45:30 -> juni (da-DK)

2009-06-15T13:45:30 -> uJuni (zu-ZA)
“s”秒(0 到 59)。

 
2009-06-15T13:45:09 -> 9
“ss”秒(00 到 59)。

 
2009-06-15T13:45:09 -> 09
“t”AM/PM 指示符的第一个字符。

 
2009-06-15T13:45:30 -> P (en-US)

2009-06-15T13:45:30 -> 午 (ja-JP)

2009-06-15T13:45:30 -> (fr-FR)
“tt”AM/PM 指示符。

 
2009-06-15T13:45:30 -> PM (en-US)

2009-06-15T13:45:30 -> 午後 (ja-JP)

2009-06-15T13:45:30 -> (fr-FR)
“y”年份(0 到 99)。

 
0001-01-01T00:00:00 -> 1

0900-01-01T00:00:00 -> 0

1900-01-01T00:00:00 -> 0

2009-06-15T13:45:30 -> 9

2019-06-15T13:45:30 -> 19
“yy”年份(00 到 99)。

 
0001-01-01T00:00:00 -> 01

0900-01-01T00:00:00 -> 00

1900-01-01T00:00:00 -> 00

2019-06-15T13:45:30 -> 19
“yyy”年份(最少三位数字)。

 
0001-01-01T00:00:00 -> 001

0900-01-01T00:00:00 -> 900

1900-01-01T00:00:00 -> 1900

2009-06-15T13:45:30 -> 2009
“yyyy”由四位数字表示的年份。

 
0001-01-01T00:00:00 -> 0001

0900-01-01T00:00:00 -> 0900

1900-01-01T00:00:00 -> 1900

2009-06-15T13:45:30 -> 2009
“yyyyy”由五位数字表示的年份。

 
0001-01-01T00:00:00 -> 00001

2009-06-15T13:45:30 -> 02009
“z”相对于 UTC 的小时偏移量,无前导零。

 
2009-06-15T13:45:30-07:00 -> -7
“zz”相对于 UTC 的小时偏移量,带有表示一位数值的前导零。

 
2009-06-15T13:45:30-07:00 -> -07
“zzz”相对于 UTC 的小时和分钟偏移量。

 
2009-06-15T13:45:30-07:00 -> -07:00
":"时间分隔符。

 
2009-06-15T13:45:30 -> : (en-US)

2009-06-15T13:45:30 -> . (it-IT)

2009-06-15T13:45:30 -> : (ja-JP)
"/"日期分隔符。

 
2009-06-15T13:45:30 -> / (en-US)

2009-06-15T13:45:30 -> - (ar-DZ)

2009-06-15T13:45:30 -> . (tr-TR)
"string"

'string'
文本字符串分隔符。

 
2009-06-15T13:45:30 ("arr:" h:m t) -> arr: 1:45 P

2009-06-15T13:45:30 ('arr:' h:m t) -> arr: 1:45 P
%将下面的字符定义为自定义格式说明符。

 
2009-06-15T13:45:30 (%h) -> 1
\转义字符。

 
2009-06-15T13:45:30 (h \h) -> 1 h
任何其他字符字符将复制到未更改的结果字符串。

 
2009-06-15T01:45:30 (arr hh:mm t) -> arr 01:45 A

2.将字符串转换为时间

将字符串转换为时间,可以使用 DateTime 和 DateTimeOffset 这两种方式进行转换,DateTimeOffset 和 DateTime 不同之处在于,DateTimeOffset 还包含了一个时区信息,每个国家的时间都是不一样的,如果涉及到时区,可以使用 DateTimeOffset 来计算。

1)DateTime.Parse

直接将字符串转换为时间,如果字符串不符合标准,那么会报错

namespace Test2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            DateTime dt = DateTime.Parse("2023-11-24 19:30:23");
            Console.WriteLine(dt);
            Console.ReadKey();
        }
    }
}

运行:

2)DateTime.TryParse

尝试将字符串转换为时间,如果字符串不符合标准,那么返回值为 false

namespace Test2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            DateTime dt;
            bool result = DateTime.TryParse("2023-11-24 11:59:13", out dt);
            Console.WriteLine("转换结果:{0}", result);
            Console.WriteLine(dt);
            Console.ReadKey();
        }
    }
}

运行:

3)DateTimeOffset.Parse

将字符串直接转换为时间,如果字符串不符合标准,那么会报错

namespace Test2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            DateTimeOffset dt = DateTimeOffset.Parse("2023-11-24 19:30:23");
            Console.WriteLine(dt);
            Console.ReadKey();
        }
    }
}

运行:

4)DateTimeOffset.TryParse

尝试将字符串转换为时间,如果字符串不符合标准,那么返回值为 false

namespace Test2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            DateTimeOffset dt;
            bool result = DateTimeOffset.TryParse("2023-11-24 11:59:13", out dt);
            Console.WriteLine("转换结果:{0}", result);
            Console.WriteLine(dt);
            Console.ReadKey();
        }
    }
}

运行:

四、时间的加减运算

时间的加减计算其实也比较简单,复杂的部分底层已经做好了封装,我们只需要知道怎么用就行了,这里使用 DateTime 或者 DateTimeOffset 都可以,我简单介绍几个基本的案例。

例1:

使用 DateTime 自带的方法,AddDays ,AddHours 等等

代码:

namespace Test2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            DateTime dt1 = DateTime.Parse("2023-11-24 19:30:23"); ;
            DateTime dt2 = dt1.AddHours(1);
            Console.WriteLine(dt2);
            Console.ReadKey();
        }
    }
}

效果:

例2:

上面的案例,一次只能加一个,如果我们想同时加上时分秒,可以使用 TimeSpan 来完成这个需求, TimeSpan 来定义时间部分是非常的方便的

namespace Test2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            DateTime dt1 = DateTime.Parse("2023-11-24 19:30:23");
            TimeSpan timeSpan = new TimeSpan(1, 20, 50);//时、分、秒
            DateTime dt2 = dt1.Add(timeSpan);
            Console.WriteLine(dt2);
            Console.ReadKey();
        }
    }
}

运行:

例3:

如果需要用一个时间,去减另一个时间,直接用运算符就可以解决了

namespace Test2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            DateTime dt1 = DateTime.Parse("2023-11-24 19:30:23");
            DateTime dt2 = DateTime.Parse("2023-11-24 23:10:51");
            TimeSpan timeSpan = dt2 - dt1;
            Console.WriteLine(timeSpan);

            Console.ReadKey();
        }
    }
}

效果:

关于时间的加减,其实还有很多的方法,比如用 DateTimeOffset 的相关接口,DateTime 的 Subtract 方法等等,方法非常的多,甚至还可以用 AddDays ,AddHours 来减时间,它不光是可以加时间,减时间只要将参数给负值就行了,如:

namespace Test2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            DateTime dt1 = DateTime.Parse("2023-11-24 19:30:23");
            DateTime dt2 = dt1.AddHours(-1);
            Console.WriteLine(dt2);
            Console.ReadKey();
        }
    }
}

效果:

由于文字个数已经超了,后面的内容:时间比较,时间数据转换,时间间隔计算,获取网络时间,时间戳,时区时间转换 等,我将放到文章的第二部分。

C# 时间计算(二)-CSDN博客

结束

如果这个帖子对你有所帮助,欢迎 关注 + 点赞 + 留言

end

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务测试怎么做,看看这篇文章就懂了!

开发团队越来越多地选择微服务架构而不是单体结构,以提高应用程序的敏捷性、可扩展性和可维护性。随着决定切换到模块化软件架构——其中每个服务都是一个独立的单元,具有自己的逻辑和数据库,通过 API 与其他单元通信——需要新的测试策略和新…

【Apache Doris】一键实现万表MySQL整库同步 | 快速体验

【Apache Doris】一键实现万表MySQL整库同步 | 快速体验) 一、 环境信息1.1 硬件信息1.2 软件信息 二、 流程介绍三、 前提概要3.1 安装部署3.2 JAR包准备3.2.1 数据源3.2.2 目标源 3.3 脚本模版 四、快速体验五、常见问题5.1 Mysql通信异常5.2 MySQL无Key同步异常5…

PC分页操作以及loading效果

page-size 每页显示条目个数 current-page 当前页数 total 数据总数 current-change【currentPage 改变时会触发】 切换分页时会先加载,等在接口数据,接口返回,加载会关闭(在获取接口数据完毕哪里加上this.loadingfalse&#xff0…

多模态——使用stable-video-diffusion将图片生成视频

多模态——使用stable-video-diffusion将图片生成视频 0. 内容简介1. 运行环境2. 模型下载3. 代码梳理3.1 修改yaml文件中的svd路径3.2 修改DeepFloyDataFiltering的vit路径3.3 修改open_clip的clip路径3.4 代码总体结构 4. 资源消耗5. 效果预览 0. 内容简介 近期,…

ArkTS-自定义组件学习

文章目录 创建自定义组件页面和自定义组件生命周期自定义组件和页面的区别页面生命周期(即被Entry修饰的组件)组件生命周期(即被Component修饰的组件) Builder装饰器:自定义构建函数按引用传递参数按值传递参数 BuilderParam装饰器:引用Builder函数 这个…

Leetcode刷题笔记题解(C++):1008. 前序遍历构造二叉搜索树

思路: 1.树中的第一个值为根(数组的第一个值),小于根的值存放在左子树中,大于根的值存放在右子树中; 2.利用递归对左右子树 /*** Definition for a binary tree node.* struct TreeNode {* int val;*…

msvcp71.dll,msvcr71.dll丢失怎么办?教你如何快速解决此问题

msvcp71.dll是Microsoft Visual C 2003运行库中的一个组件,它是Microsoft Visual C 2003编译的程序在运行时所需要的动态链接库文件。它包含了许多C标准库函数的实现,如字符串处理、数学计算等。当程序运行时,如果缺少这个文件,就…

python实现存款日利息计算器(窗口界面形式)

输入存款金额,7日年化收益率,输出每日利息 完整源码如下: import tkinter as tk from tkinter import messageboxdef calculate_interest():deposit float(entry_deposit.get())interest_rate float(entry_interest_rate.get())daily_int…

初始linux:文件操作

目录 提示&#xff1a;以下指令均在Xshell 7 中进行 linux的理念 一、echo echo "字符串" 二、输出重定向 > > [文件] echo "字符串" > [文件] echo "字符串" > > [文件] 制作大文件 三、< 输入重定向与ca…

HEADER请求头都有哪些,作用是什么?

HTTP 请求头是在客户端向服务器发送 HTTP 请求时&#xff0c;包含有关请求的附加信息的部分。以下是一些常见的 HTTP 请求头及其作用&#xff1a; Accept&#xff1a; 作用&#xff1a; 客户端通知服务器可以接受哪些媒体类型&#xff08;如 text/html、application/json&…

Linux:Ubuntu实现远程登陆

1、查看sshd服务是否存在 Ubuntu默认是没有安装sshd服务的&#xff0c;所以&#xff0c;无法远程登陆。 检查22端口是否存在 netstat -anp 该命令执行后&#xff0c;查看不到22端口的进程。 如果netstat无法使用&#xff0c;我们需要安装一下netstat服务 sudo apt-get install…

【电路笔记】-分压器

分压器 文章目录 分压器1、概述2、负载分压器3、分压器网络4、无功分压器4.1 电容分压器4.2 感应分压器 5、总结 有时&#xff0c;需要精确的电压值作为参考&#xff0c;或者仅在需要较少功率的电路的特定阶段之前需要。 分压器是解决此问题的一个简单方法&#xff0c;因为它们…

001、First_blood-Hello World

之——start 目录 之——start 杂谈 正文 1.内容 2.DevEco Studio 3.运行hello world 4.微调 5.工程目录 总结 杂谈 开启学习之旅&#xff0c;记录学习点滴。应用开发基础知识&#xff0c;新版本新技术新特征&#xff0c;十分友好&#xff0c;十分期待。另外有&#…

UML建模图文详解教程07——活动图

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;《UML面向对象分析、建模与设计&#xff08;第2版&#xff09;》吕云翔&#xff0c;赵天宇 著 活动图概述 活动图(activity diagram)是 UML中一种重…

文件夹重命名:彻底摆脱数字困扰,批量修改文件夹名去除数字

在日常生活和工作中&#xff0c;经常会遇到需要修改文件夹名称的情况。有时候是因为文件夹名称中包含了数字&#xff0c;有时候是因为文件夹名称不符合规范。无论出于什么原因&#xff0c;修改文件夹名称都是一件非常繁琐的事情。尤其是需要修改大量文件夹名称时&#xff0c;手…

Java系列之 String indexOf() 方法

我 | 在这里 &#x1f575;️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 &#x1f3e0; 工作 | 广州 ⭐ Java 全栈开发&#xff08;软件工程师&#xff09; &#x1f383; 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 &#x1f3f7;️ 标签 | 男 自律狂人 目标明确 责任心强 ✈️公…

【计算机网络】(网络层)定长掩码和变长掩码

目录 1、IPV4地址的应用规划 2、例题分析 2.1、定长的子网掩码 2.2、变长的子网掩码 1、IPV4地址的应用规划 定长的子网掩码&#xff08;FLSM&#xff09;&#xff1a; 使用同一个子网掩码划分子网&#xff0c;每个子网所分配的IP地址数量相同&#xff0c;造成IP地址的浪费…

数据结构——堆的实现

堆的实现-----C语言版 目录&#xff1a;一、堆的实现1.1堆的定义1.2堆的实现1.2.1堆的各个接口1.2.2堆的向上调整1.2.3堆的向下调整1.2.4堆的定义声明和初始化1.2.5堆的数据处理1.2.6堆的判空和堆的数据个数以及堆销毁1.2.7堆的代码实现 二、TOP—K问题 目录&#xff1a; 一、…

历时半年,我发布了一款习惯打卡小程序

半年多前&#xff0c;我一直困扰于如何记录习惯打卡情况&#xff0c;在参考了市面上绝大多数的习惯培养程序后&#xff0c;终于创建并发布了这款习惯打卡小程序。 “我的小日常打卡”小程序主要提供习惯打卡和专注训练功能。致力于培养用户养成一个个好的习惯&#xff0c;改掉…

[Latex] Riemann 问题中的激波,接触间断,膨胀波的 Tikz 绘图

Latex 代码 \begin{figure}\begin{subfigure}[b]{0.32\textwidth}\centering\resizebox{\linewidth}{!}{\begin{tikzpicture}\coordinate (o) at (0,0);\coordinate (Si) at (2.5,2.5);\coordinate (x) at (1,0);\draw[->] (0,0) -- (3,0) node[right] {$x$};\draw[->] …