كيفية تحويل التاريخ والوقت من سلمان إلى C# ؟ [مكررة]
-
05-07-2019 - |
سؤال
ممكن مكررة:
كيفية تحويل UNIX timestamp إلى التاريخ والوقت والعكس بالعكس ؟
لقد حصلت على الفئة التالية:
[DataContractAttribute]
public class TestClass
{
[DataMemberAttribute]
public DateTime MyDateTime { get; set; }
}
هنا سلمان:
{ "MyDateTime":"1221818565" }
سلمان يتم إرجاعها من PHP ويب.
ما كنت بحاجة إلى القيام به هو تحويل تلك الحقبة السلسلة إلى صالح C# التاريخ والوقت.ما هي أفضل طريقة للقيام بذلك ؟
أنا يمكن أن تفعل هذا:
[IgnoreDataMemberAttribute]
public DateTime MyDateTime { get; set; }
[DataMemberAttribute(Name = "MyDateTime")]
public Int32 MyDateTimeTicks
{
get { return this.MyDateTime.Convert(...); }
set { this.Created = new DateTime(...); }
}
ولكن المشكلة مع هذا ، MyDateTimeTicks العامة (تغيير ذلك إلى أسباب خاصة استثناء في عملية التسلسل)
المحلول
التشطيب ما نشر ، مما يجعل القطاع الخاص يبدو أن تعمل بشكل جيد بالنسبة لي.
[DataContract]
public class TestClass
{
private static readonly DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
[IgnoreDataMember]
public DateTime MyDateTime { get; set; }
[DataMember(Name = "MyDateTime")]
private int MyDateTimeTicks
{
get { return (int)(this.MyDateTime - unixEpoch).TotalSeconds; }
set { this.MyDateTime = unixEpoch.AddSeconds(Convert.ToInt32(value)); }
}
}
نصائح أخرى
private DateTime ConvertJsonStringToDateTime(string jsonTime)
{
if (!string.IsNullOrEmpty(jsonTime) && jsonTime.IndexOf("Date") > -1)
{
string milis = jsonTime.Substring(jsonTime.IndexOf("(") + 1);
string sign = milis.IndexOf("+") > -1 ? "+" : "-";
string hours = milis.Substring(milis.IndexOf(sign));
milis = milis.Substring(0, milis.IndexOf(sign));
hours = hours.Substring(0, hours.IndexOf(")"));
return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(Convert.ToInt64(milis)).AddHours(Convert.ToInt64(hours) / 100);
}
return DateTime.Now;
}
هنا هو ما كنت تصل.في C#, يبدو أنك تحتاج إلى إنشاء جديد والوقت إضافة الحقبة قيمة 'ثانية إلى هذا التاريخ والوقت.هنا هو ما يبدو في التعليمات البرمجية:
new System.DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(1221818565);
عند استخدام Visual Studio فورية تلك المطبوعة نتيجة هذه العملية إلى المصحح وحدة التحكم:
{9/19/2008 10:02:45 AM}
Date: {9/19/2008 12:00:00 AM}
Day: 19
DayOfWeek: Friday
DayOfYear: 263
Hour: 10
Kind: Unspecified
Millisecond: 0
Minute: 2
Month: 9
Second: 45
Ticks: 633574153650000000
TimeOfDay: {10:02:45}
Year: 2008
أعلم أن سؤالك كان عن PHP, ولكن أردت فقط أن أشير إلى "مسكتك" على .صافي سلمان:ويبدو أن .صافي يعطيك تاريخ في "ميلي ثانية منذ عصر" (بدلا من ثانية).في هذه الحالة ، AddSeconds يجب أن يكون خط:unixEpoch.AddMilliseconds(Int64.Parse(date));
مزيد من المعلومات: http://blogs.msdn.com/b/marcelolr/archive/2008/03/05/system-datetime-ticks-vs-json-date.aspx
ما تريده هو ما يلي:
DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
DateTime dotnetTime = unixEpoch.AddSeconds(Convert.ToDouble(ticks));
حيث ticks
هو القيمة التي تم تمريرها لك من قبل PHP.