一、C# 随机数(伪随机 + 安全随机)
1. 核心概念
计算机中没有真正的随机数,生成的都是伪随机数(通过算法 + 种子计算得出)。
- 种子相同 → 生成的随机数序列完全相同
- 不指定种子 → 默认使用系统当前时间作为种子,随机性更好
2. 常用随机数生成方式
(1)Random 类(基础随机数,推荐日常使用)
cs
// 1. 指定种子(种子相同,随机数相同)
Random r1 = new Random(10);
Console.WriteLine(r1.Next());
// 2. 不指定种子(默认时间为种子,推荐)
Random r2 = new Random();
// 生成指定范围随机数 [min, max) 包含最小值,不包含最大值
Console.WriteLine(r2.Next(10, 21)); // 10~20
Console.WriteLine(r2.Next(21)); // 0~20
// 3. 循环生成多个随机数(重点:Random 不要写在循环内!)
Random r3 = new Random();
for (int i = 0; i < 4; i++)
{
Console.WriteLine(r3.Next()); // 正确用法
}
(2)随机生成字母 / 字符串
cs
// 方式1:从指定字符串中随机取字符
string str = "qwertyuiopasdfghjklzxcvbnm";
Random r4 = new Random();
// 生成4位随机字母
string res = "";
for (int i = 0; i < 4; i++)
{
res += str[r4.Next(str.Length)];
}
Console.WriteLine(res);
// 方式2:通过 ASCII 码生成 a-z(97~122)
string res2 = "";
for (int i = 0; i < 4; i++)
{
res2 += (char)r4.Next(97, 123);
}
Console.WriteLine(res2);
(3)高级随机数(了解)
-
GUID :全球唯一标识符,几乎不会重复,适合生成订单号、唯一 ID
csConsole.WriteLine(Guid.NewGuid()); -
RNGCryptoServiceProvider :加密级安全随机数,适合密码、密钥场景
csRNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); byte[] bs = new byte[10]; rng.GetBytes(bs); Console.WriteLine(BitConverter.ToString(bs));
3. 避坑指南
- 循环生成随机数时,不要在循环内 new Random (),会因为执行时间过短导致种子相同,随机数重复。
二、DateTime 日期时间操作
1. 核心作用
DateTime 是结构体,用于存储、获取、格式化系统日期和时间。
2. 获取当前时间 + 拆分年月日时分秒
cs
// 获取当前系统时间
DateTime now = DateTime.Now;
Console.WriteLine(now);
// 拆分时间分量
Console.WriteLine(now.Year); // 年
Console.WriteLine(now.Month); // 月
Console.WriteLine(now.Day); // 日
Console.WriteLine(now.Hour); // 小时(24制)
Console.WriteLine(now.Minute); // 分钟
Console.WriteLine(now.Second); // 秒
Console.WriteLine(now.Millisecond); // 毫秒
Console.WriteLine(now.DayOfWeek); // 星期(英文)
Console.WriteLine((int)now.DayOfWeek); // 星期数字(周日=0)
Console.WriteLine(now.DayOfYear); // 当年第几天
3. 时间格式化字符串(重点)
通过 ToString(格式符) 自定义时间显示格式:
| 格式符 | 含义 | 示例 |
|---|---|---|
| yyyy | 4 位年份 | 2026 |
| MM | 2 位月份 | 05 |
| dd | 2 位日期 | 21 |
| HH | 24 小时制 | 14 |
| hh | 12 小时制 | 02 |
| mm | 分钟 | 30 |
| ss | 秒 | 59 |
| fff | 毫秒 | 123 |
cs
DateTime now = DateTime.Now;
Console.WriteLine(now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine(now.ToString("今年是yyyy年MM月dd日 HH:mm:ss"));
4. 时间戳(秒 / 毫秒)
时间戳:当前时间距离 1970-01-01 00:00:00 的秒数 / 毫秒数,常用于跨平台时间传输。
cs
DateTime now = DateTime.Now;
DateTimeOffset offset = new DateTimeOffset(now);
// 1. 时间 → 时间戳
long second = offset.ToUnixTimeSeconds(); // 秒
long millisecond = offset.ToUnixTimeMilliseconds(); // 毫秒
// 2. 时间戳 → 时间
DateTime time = DateTimeOffset.FromUnixTimeSeconds(1779347102).LocalDateTime;
Console.WriteLine(time);
三、时间对象的计算和比较
1. 时间加减计算
DateTime 提供专用方法计算时间,不会修改原时间,返回新时间:
cs
DateTime now = DateTime.Now;
// 加法
now = now.AddYears(1); // 加1年
now = now.AddMonths(2); // 加2月
now = now.AddDays(3); // 加3天
now = now.AddHours(1); // 加1小时
// 减法(传入负数)
now = now.AddYears(-1); // 减1年
2. 时间比较
DateTime 支持直接用 > < == >= <= 比较(运算符重载):
cs
if (DateTime.Now > new DateTime(2027, 5, 24))
{
Console.WriteLine("已过指定日期");
}
else
{
Console.WriteLine("未到指定日期");
}
3. 时间间隔(TimeSpan)
两个时间相减,得到 TimeSpan(时间差对象):
cs
DateTime end = new DateTime(2026, 5, 21, 16, 0, 0);
TimeSpan span = end - DateTime.Now;
// 获取时间差分量
Console.WriteLine(span.Days); // 天数
Console.WriteLine(span.Hours); // 小时
Console.WriteLine(span.Minutes); // 分钟
Console.WriteLine(span.Seconds); // 秒
四、string 字符串常用方法(高频使用)
1. 字符串定义方式
cs
// 1. 普通定义
string s1 = "Hello C#";
// 2. 换行转义 \r\n
string s2 = "第一行\r\n第二行";
// 3. @ 原样字符串(保留格式,无需转义)
string path = @"C:\Users\Desktop";
// 4. new 方式(重复字符)
string s3 = new string('c', 4); // "cccc"
2. 字符串常用操作方法
| 方法 | 作用 | 示例 |
|---|---|---|
string.Concat(a,b) |
拼接多个字符串 | string.Concat("张","三")→"张三" |
string.Join(分隔符, 数组) |
用分隔符连接字符串 | string.Join("-","a","b")→"a-b" |
ToLower() |
转小写 | "ABC".ToLower()→"abc" |
ToUpper() |
转大写 | "abc".ToUpper()→"ABC" |
StartsWith(值) |
判断是否以指定字符开头 | 返回 bool |
EndsWith(值) |
判断是否以指定字符结尾 | 返回 bool |
IndexOf(值) |
查找字符索引,不存在返回 - 1 | "abc".IndexOf("b")→1 |
Substring(起始,长度) |
截取字符串 | "abcde".Substring(1,2)→"bc" |
Replace(旧,新) |
替换字符 | "abc".Replace("a","*")→"*bc" |
Split(分隔符) |
分割字符串为数组 | "a-b-c".Split('-')→[a,b,c] |
Trim() |
去除首尾空格 | " 张三 ".Trim()→"张三" |
TrimEnd() |
去除尾部空格 | - |
3. 完整示例
cs
string str = " 尉氏县自来水污染上央视新闻 ";
// 去除空格
str = str.Trim();
// 判断开头
Console.WriteLine(str.StartsWith("尉"));
// 查找索引
Console.WriteLine(str.IndexOf("县"));
// 截取字符串
Console.WriteLine(str.Substring(3, 4));
// 替换
Console.WriteLine(str.Replace("污染", "**"));
// 分割
string arr = "a-b-c-d".Split('-');
总结
- 随机数 :日常用
Random(不写在循环内),唯一 ID 用GUID,安全场景用加密随机数; - DateTime :核心掌握
获取时间、格式化、时间戳转换; - 时间计算 :用
AddXXX方法加减,用TimeSpan计算时间差; - 字符串 :
Substring、Replace、Split、Trim、IndexOf是工作中最常用的方法。