首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将JSON格式的DateTime转换成C#格式?

如何将JSON格式的DateTime转换成C#格式?
EN

Stack Overflow用户
提问于 2008-10-30 10:01:11
回答 5查看 33K关注 0票数 18

可能重复:

How to convert UNIX timestamp to DateTime and vice versa?

我有如下的类:

代码语言:javascript
复制
[DataContractAttribute]
public class TestClass
{
  [DataMemberAttribute]
  public DateTime MyDateTime { get; set; }
}

下面是JSON:

代码语言:javascript
复制
{ "MyDateTime":"1221818565" }

JSON是从PHP PHP服务返回的。

我需要做的是将纪元字符串转换为有效的C# DateTime。做这件事的最好方法是什么?

我可以这样做:

代码语言:javascript
复制
[IgnoreDataMemberAttribute]
public DateTime MyDateTime { get; set; }

[DataMemberAttribute(Name = "MyDateTime")]
public Int32 MyDateTimeTicks
{
  get { return this.MyDateTime.Convert(...); }
  set { this.Created = new DateTime(...); }
}

但这样做的问题是,MyDateTimeTicks是公共的(将其更改为私有会导致序列化过程中出现异常)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-10-31 00:58:52

完成你发布的内容,并将其设置为私密,对我来说似乎很好。

代码语言:javascript
复制
[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)); }
    }

}
票数 20
EN

Stack Overflow用户

发布于 2012-08-10 00:29:54

代码语言:javascript
复制
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;
        }
票数 7
EN

Stack Overflow用户

发布于 2008-10-30 21:13:20

这是我想出来的。在C#中,看起来您需要创建一个新的DateTime,并将纪元值'seconds‘添加到此DateTime中。下面是它在代码中的样子:

代码语言:javascript
复制
new System.DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(1221818565);

在使用Visual Studio即时窗口时,我将此操作的结果打印到调试器控制台:

代码语言:javascript
复制
{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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/249721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档