PDA

View Full Version : مشکل تاریخ در نت فرم ورک 4 به بالا



hamidrezax1
دوشنبه 11 اسفند 1399, 20:31 عصر
سلام دوستان وقت بخیر من با فانکشن های متفاوتی تاریخ رو تغیر میدادم و مشکلی در این خصوص نداشتم.مثلا با دستور NOW میتونم تاریخ میلادی سیستم رو بدست بیارم اما به محض اینکه از نت فرم ورک 4 استفاده میکنم همین دستور تاریخ رو به من فارسی برمیگردونه.لطفا اگر کسی از دوستان راه کاری داره ممنون میشم راهنمایی کنه(ویندوز 10 و این رو هم بگم فقط برای یک سیستم نمیخوام لطفا این رو در نظر بگیرین که راهنمایتون تغیرات تنظیمات ساعت و تاریخ ویندوز نباشه ) با تشکر

Mahmoud.Afrad
چهارشنبه 13 اسفند 1399, 18:43 عصر
حروف فارسی ؟ یا شمسی؟

کد بزارید. برای بار چندهزارم داریم میگیم.

hamidrezax1
پنج شنبه 14 اسفند 1399, 15:35 عصر
سلام وقت بخیر
عرض کردم کد زیاده منتحی زمانی که شما از دات نت 3.5 به 4 و بالاتر میرید در ویندوز 10 که تاریخ فارسی باشه کلا ساختار فارسی میشه




Public Function Miladi2Shamsi(ByVal miladiDate As Date) As String
Dim pc As New PersianCalendar
Dim sb As New StringBuilder
sb.AppendFormat("{0}/{1}/{2}", pc.GetYear(miladiDate).ToString(), pc.GetMonth(miladiDate).ToString("D2"), pc.GetDayOfMonth(miladiDate).ToString("D2"))
Return sb.ToString()
End Function









Function ShamsiToMiladi(ByVal ShamsiDate As String) As String
If IsNumeric(ShamsiDate.Replace("/", "")) = False Then Return 0
Try
If ShamsiDate.Length <> 10 Then Return 0
Dim Date_Sh As New Globalization.PersianCalendar()
Dim Date_M As DateTime = Date_Sh.ToDateTime(ShamsiDate.Substring(0, 4), ShamsiDate.Substring(5, 2), _
ShamsiDate.Substring(8, 2), _
0, 0, 0, 0, _
Globalization.PersianCalendar.PersianEra)
Return Date_M.ToShortDateString
Catch ex As Exception
Return 0
End Try
End Function

Mahmoud.Afrad
شنبه 16 اسفند 1399, 15:50 عصر
ساختار datetime میلادی هست منتها در زمان نمایش ویندوز برحسب تنظیماتش شمسی نشون میده. در خط ۱۰ از متد تبدیل شمسی به میلادی از متد tostring استفاده کنید و فرمت مناسب را به پارامتر اول و invariantculture را به عنوان پارامتر دوم بهش بدید.
https://docs.microsoft.com/en-us/dotnet/api/system.globalization.cultureinfo.invariantculture

hamidrezax1
شنبه 16 اسفند 1399, 19:17 عصر
سلام وقت بخیر من این دیده بودم منتحی نتونستم پیاده سازی کنم.لطفا میشه بیشتر راهنمایی کنید و یا در صورت امکان این کد رو تصیح کنید




Public Shared Sub Main()
Dim sw As New StreamWriter(".\DateData.dat")
Dim dtIn As DateTime = DateTime.Now
Dim invC As CultureInfo = CultureInfo.InvariantCulture
sw.WriteLine(dtIn.ToString("r", invC))
sw.Close()
Dim sr As New StreamReader(".\DateData.dat")
Dim input As String
While (input = sr.ReadLine()) IsNot Nothing
Console.WriteLine("Stored data: {0}" & vbLf, input)
Dim dtOut As DateTime = DateTime.Parse(input, invC, DateTimeStyles.RoundtripKind)
Dim frFr As New CultureInfo("fr-FR")
Console.WriteLine("Date formatted for the {0} culture: {1}", frFr.Name, dtOut.ToString("f", frFr))
Dim deDe As New CultureInfo("de-De")
Console.WriteLine("Date formatted for {0} culture: {1}", deDe.Name, dtOut.ToString("f", deDe))
End While
sr.Close()
End Sub




البته کد بالا در خط



While (input = sr.ReadLine()) IsNot Nothing




این ارور رو میده



'IsNot' requires operands that have reference types, but this operand has the value type 'Boolean'

Mahmoud.Afrad
شنبه 16 اسفند 1399, 22:39 عصر
Return Date_M.ToString( Globalization.CultureInfo.InvariantCulture)

اگر فقط تاریخ نیاز هست با استفاده از فرمت مثلا

Return Date_M.ToString("yyyy/MM/dd", Globalization.CultureInfo.InvariantCulture)

hamidrezax1
یک شنبه 17 اسفند 1399, 15:12 عصر
ممنونم دوست عزیز
برای تبدیل شمسی به میلادی فرمایش شما درست اعمال میشه ، اما برای میلادی به شمسی چکار باید کرد ممنون میشم راهنمایی بفرمایید

البته مشکل من توی تقویم های برعکس هست مثلا گاهی تاریخ بعضی از سیستم ها 2020/01/01 هست و گاهی 01/01/2021 که دچار مشکل میشم وگرنه این تابع مشکل رو حل میکنه




Public Function Miladi2Shamsi(ByVal miladiDate As String) As String
Dim [date] As DateTime = Convert.ToDateTime("" + miladiDate.Substring(0, 4) + "-" + miladiDate.Substring(5, 2) + "-" + miladiDate.Substring(8, 2) + "T00:00:00.001Z")
Dim persianDateString As String = [date].ToString("yyyy/MM/dd", New CultureInfo("fa-IR"))
Return persianDateString
End Function