迷恋自留地 发表于 2022-10-18 17:52

C#日期类型转化总结【转化,农历,节气,星期】

本帖最后由 迷恋自留地 于 2022-10-18 17:53 编辑

### 转为日期类型

将8位日期字符串转换为日期格式

```csharp
dateStr = "20220203";
System.IFormatProvider format=new System.Globalization.CultureInfo("zh-CN",true);
string strDateFormat = "yyyyMMdd";//指定转换格式
date = DateTime.ParseExact(dateStr,strDateFormat,format, DateTimeStyles.AllowWhiteSpaces);
```

将6位字符串转化为日期格式

```csharp
dateStr = "202202";
System.IFormatProvider format=new System.Globalization.CultureInfo("zh-CN",true);
string strDateFormat = "yyyyMM";//指定转换格式
date = DateTime.ParseExact(dateStr,strDateFormat,format, DateTimeStyles.AllowWhiteSpaces);

var str = "2022/02/03";
var time = new DateTime();
if (DateTime.TryParse(str, out time))
{
   Console.WriteLine($"转化成功{time}");
}
```

采用拼接连接符的方式进行日期转换(不建议采用)

```csharp
//分别获取20051126中的年、月、日字符串   
string yyyy="20051126".Substring(0,4);   
string mm="20051126".Substring(4,2);   
string dd="20051126".Substring(5,2); //拼写符合日期格式的字符串   
string riqi=yyyy+"-"+mm+"-"+dd;//将符合日期格式的字符串转化为DateTime数据类型   
DateTime dt = Convert.ToDateTime(riqi);
```

使用字符串插入函数进行日期转换

```csharp
// 把20051126变为2005/11/26
DateTimeFormatInfo dtFormat = new System.GlobalizationDateTimeFormatInfo();
dtFormat.ShortDatePattern = "yyyy/MM/dd";
string s = "20051126";   
s = s.Insert(4,"/");   
s = s.Insert(7,"/");
DateTime dt = Convert.ToDateTime(s, dtFormat);
```



### 获取星期几

```
string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
var a = Day;
Console.WriteLine(a);
```



### DateTime时间格式转换为Unix时间戳格式

```
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0));
long t = (time.Ticks - startTime.Ticks) / 10000;//除10000调整为13位
```

### 优雅的获取农历

```
ChineseLunisolarCalendar ChineseCalendar = new ChineseLunisolarCalendar();
int year = ChineseCalendar.GetYear(DateTime.Now);
int day = ChineseCalendar.GetDayOfMonth(DateTime.Now);
int month = ChineseCalendar.GetMonth(DateTime.Now);
int leapMonth = ChineseCalendar.GetLeapMonth(year);
string date = string.Format("农历{0}{1}({2})年{3}{4}月{5}{6}"
, "甲乙丙丁戊己庚辛壬癸"[(year - 4) % 10]
, "子丑寅卯辰巳午未申酉戌亥"[(year - 4) % 12]
, "鼠牛虎兔龙蛇马羊猴鸡狗猪"[(year - 4) % 12]
, month == leapMonth ? "闰" : ""
, "无正二三四五六七八九十冬腊"
, "初十廿三"
, "十一二三四五六七八九");
Console.WriteLine($"当前时间:{DateTime.Now},农历是:"+date);
//输出:当前时间:2022/10/18 18:27:00,农历是:农历壬寅(虎)年九月廿三
```



### 获取二十四节气



```
//输入new DateTime(2022,10,23) 输出 霜降
//输入new DateTime(2022,10,8) 输出 寒露
//输入new DateTime(2022,10,18) 输出“”【暂无节气】
public static string ChineseTwentyFourDay(DateTime date1)
{
      string[] SolarTerm = new string[] { "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" };
      int[] sTermInfo = new int[] { 0, 21208, 42467, 63836, 85337, 107014, 128867, 150921, 173149, 195551, 218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224, 483532, 504758 };
      DateTime baseDateAndTime = new DateTime(1900, 1, 6, 2, 5, 0); //#1/6/1900 2:05:00 AM#
      DateTime newDate;
      double num;
      int y;
      string tempStr = "";

      y = date1.Year;

      for (int i = 1; i <= 24; i++)
      {
            num = 525948.76 * (y - 1900) + sTermInfo;

            newDate = baseDateAndTime.AddMinutes(num);//按分钟计算
            if (newDate.DayOfYear == date1.DayOfYear)
            {
                tempStr = SolarTerm;
                break;
            }
      }
                public static string ChineseTwentyFourDay(DateTime date1)
      {
            string[] SolarTerm = new string[] { "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" };
            int[] sTermInfo = new int[] { 0, 21208, 42467, 63836, 85337, 107014, 128867, 150921, 173149, 195551, 218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224, 483532, 504758 };
            DateTime baseDateAndTime = new DateTime(1900, 1, 6, 2, 5, 0); //#1/6/1900 2:05:00 AM#
            DateTime newDate;
            double num;
            int y;
            string tempStr = "";

            y = date1.Year;

            for (int i = 1; i <= 24; i++)
            {
                num = 525948.76 * (y - 1900) + sTermInfo;

                newDate = baseDateAndTime.AddMinutes(num);//按分钟计算
                if (newDate.DayOfYear == date1.DayOfYear)
                {
                  tempStr = SolarTerm;
                  break;
                }
            }
            return tempStr;
      }return tempStr;
}
```



### 转为字符串类型

```csharp
//2021年4月24日
System.DateTime.Now.ToString("D");
//2021-4-24
System.DateTime.Now.ToString("d");
//2021年4月24日 16:30:15
System.DateTime.Now.ToString("F");
//2021年4月24日 16:30
System.DateTime.Now.ToString("f");
//2021-4-24 16:30:15
System.DateTime.Now.ToString("G");
//2021-4-24 16:30
System.DateTime.Now.ToString("g");
//16:30:15
System.DateTime.Now.ToString("T");
//16:30
System.DateTime.Now.ToString("t");
//2021年4月24日 8:30:15
System.DateTime.Now.ToString("U");
//2021-04-24 16:30:15Z
System.DateTime.Now.ToString("u");
//4月24日
System.DateTime.Now.ToString("m");
System.DateTime.Now.ToString("M");
//Tue, 24 Apr 2021 16:30:15 GMT
System.DateTime.Now.ToString("r");
System.DateTime.Now.ToString("R");
//2021年4月
System.DateTime.Now.ToString("y");
System.DateTime.Now.ToString("Y");
//2021-04-24T15:52:19.1562500+08:00
System.DateTime.Now.ToString("o");
System.DateTime.Now.ToString("O");
//2021-04-24T16:30:15
System.DateTime.Now.ToString("s");
//2021-04-24 15:52:19
System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff");
//2021年04月24 15时56分48秒
System.DateTime.Now.ToString("yyyy年MM月dd HH时mm分ss秒");
//星期二, 四月 24 2021
System.DateTime.Now.ToString("dddd, MMMM dd yyyy");
//二, 四月 24 ’08
System.DateTime.Now.ToString("ddd, MMM d \"’\"yy");
//星期二, 四月 24
System.DateTime.Now.ToString("dddd, MMMM dd");
//4-08
System.DateTime.Now.ToString("M/yy");
//24-04-08
System.DateTime.Now.ToString("dd-MM-yy");

//今天 获取短时间类型   2022/10/18 0:00:00
DateTime.Now.Date.ToShortDateString();

//7天后
DateTime.Now.Date.ToShortDateString();
DateTime.Now.AddDays(7).ToShortDateString();
//7天前
DateTime.Now.AddDays(-7).ToShortDateString();
DateTime.Now.Date.ToShortDateString();


```

#### 推荐阅读

- (https://mp.weixin.qq.com/s/8Bhyzoz42SK_uvjYENTDXQ)
- (https://mp.weixin.qq.com/s/MJD4gY61pgtm_rHOwVmWAQ)
- [生成条形码二维码DataMatrix条码.EAN码.39码.交叉25码.UPC码.128码.93码.ISBN码.Codabar等](https://mp.weixin.qq.com/s/yUxl_iSZZd-fOo6YOkYrng)
- (https://mp.weixin.qq.com/s/uIvgBvEPHVObuhzYtQLrNw)

#### 资料参考

- (https://blog.csdn.net/m1m2m3mmm/article/details/123231352)
- (https://blog.csdn.net/aq9527/article/details/80472643)
- (https://www.cnblogs.com/weloglog888/archive/2013/01/21/2869488.html)

https://img2022.cnblogs.com/blog/1920368/202210/1920368-20221018151428175-1348767064.jpg

zzglxl 发表于 2022-10-18 18:00

这个不错,收藏一下,说不定哪天用到,感谢分享!

YukinoshitaKa 发表于 2022-10-18 18:57

收藏了复制拷贝才是吾辈最爱{:301_997:}

lance17 发表于 2022-10-18 19:22

真不错,感谢楼主分享,以备不时之需

GMCN 发表于 2022-10-18 19:36

牛的牛的

yk2014 发表于 2022-10-18 19:38

感谢分享,收藏了

HaloMaple 发表于 2022-10-18 21:04

谢谢分享,好东西

aspllh 发表于 2022-11-8 13:00

这个必须要收起来,非常实用

androllen 发表于 2022-11-9 23:39

说不定哪天用到,收藏了
页: [1]
查看完整版本: C#日期类型转化总结【转化,农历,节气,星期】