一、 简介
在工作中可能会遇到生成报告的功能,需要将时间格式转换为中文,本文主要介绍Date格式的时间转换为中文。
注:本文实例中 首先会对参数判断是否为空 若为空:赋默认值 再开始转换;若不为空:则开始转换。
二、 日期格式化
本文包括两种转换(2023/12/31)
格式1:2023年12月31日
格式2:二零二三年十二月三十一日
1. 将日期转换为"yyyy年MM月dd日"的中文格式
Public Function IsBoolDate(obj As Object) As String
Dim str1 As String = " 格式不正确 "
Try
If obj Is Nothing OrElse obj.ToString() = "" Then
Dim str3 = Date.MinValue '或者其他默认值,表示空日期
str1 = str3.ToString("yyyy年MM月dd日")
Else
If TypeOf obj Is Date Then
Dim str3 = CType(obj, Date)
str1 = str3.ToString("yyyy年MM月dd日")
Else
str1 = " 格式不正确 "
End If
End If
Catch ex As Exception
Return str1
End Try
Return str1
End Function
2. 将日期转换为中文大写的年月日格式
Dim chineseNumbers() As String = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"}
Public Function IsBoolDate(obj As Object) As String
Dim str1 As String = " 格式不正确 "
Try
If obj Is Nothing OrElse obj.ToString() = "" Then
Dim str3 As Date = Date.MinValue '或者其他默认值,表示空日期
Return ToChineseYearAndMonthAndDay(str3)
Else
If TypeOf obj Is Date Then
Dim str3 As Date = CType(obj, Date)
Return ToChineseYearAndMonthAndDay(str3)
Else
str1 = " 格式不正确 "
End If
End If
Catch ex As Exception
Return str1
End Try
Return str1
End Function
Private Function ToChineseYearAndMonthAndDay(dt As Date) As String
'将年份、月份和日转换为中文文字
Dim chineseYear As String = YearToChinese(dt.Year)
Dim chineseMonth As String = MonthToChinese(dt.Month)
Dim chineseDay As String = DayToChinese(dt.Day)
'构造中文格式的日期字符串
Dim formattedDate As String = $"{chineseYear}年{chineseMonth}月{chineseDay}日"
Return formattedDate
End Function
'月
Private Function MonthToChinese(number As Integer) As String
If number = 10 Then
Return "十"
ElseIf number > 10 Then
Return "十" & chineseNumbers(number Mod 10)
Else
Return chineseNumbers(number)
End If
End Function
'日
Private Function DayToChinese(number As Integer) As String
If number = 10 Then
Return "十"
ElseIf number > 10 Then
Return "十" & chineseNumbers(number Mod 10)
ElseIf number = 20 Then
Return "二十"
ElseIf number > 20 Then
Return "二" & chineseNumbers(number Mod 10)
ElseIf number = 30 Then
Return "三十"
ElseIf number > 30 Then
Return "三十" & chineseNumbers(number Mod 10)
Else
Return chineseNumbers(number)
End If
End Function
'年
Private Function YearToChinese(number As Integer) As String
Dim sb As New StringBuilder(4)
While number > 0
Dim digit As Integer = number Mod 10
sb.Insert(0, chineseNumbers(digit))
number \= 10
End While
Return sb.ToString()
End Function
三、结语
目前只遇到这两种,遇到后再更新……
如有错误或更好的方法 请告诉我!嘿嘿