【问题标题】:Convert unix timestamp to normal date (UWP)将 unix 时间戳转换为正常日期 (UWP)
【发布时间】:2017-11-22 10:24:08
【问题描述】:

我有 UWP 应用程序,我可以在其中获取我的 json、写入列表和 Binf 以查看

这是视图模型的代码:

 public class TopPostsViewModel : INotifyPropertyChanged
{
    private List<Child> postsList;

    public List<Child> PostsList
    {
        get { return postsList; }
        set { postsList = value; OnPropertyChanged(); }
    }

    public TopPostsViewModel()
    {
        Posts_download();
    }


    public async void Posts_download()
    {
        string url = "https://www.reddit.com/top/.json?count=50";

        var json = await FetchAsync(url);


        RootObject rootObjectData = JsonConvert.DeserializeObject<RootObject>(json);
        PostsList = new List<Child>(rootObjectData.data.children);

    }
    private async Task<string> FetchAsync(string url)
    {
        string jsonString;

        using (var httpClient = new System.Net.Http.HttpClient())
        {
            var stream = await httpClient.GetStreamAsync(url);
            StreamReader reader = new StreamReader(stream);
            jsonString = reader.ReadToEnd();
        }

        return jsonString;
    }

在 json 中,我有 data.created_utc 字段。例如它就像这样created_utc: 1446179731。我读到这是unix timestamp

这是我的课程:Classes

我需要将其转换为正常日期。我怎样才能做到这一点并写回列表?

所以我的问题更多是关于如何获取字段并将其写回。

【问题讨论】:

  • 不,编辑我的问题@JericCruz
  • @Logan “写回”是什么意思?
  • 获取数据,将其转换为正常日期并将其写回列表,或者,我如何转换它?@VijayNirmal
  • @Logan 我不明白你的问题。 1. Take data 'data2.created_utc' 很容易, 2. 可以使用this post 转换, 3. 在List 中写入结果有什么问题? (或)我错过了什么吗?

标签: c# .net json unix uwp


【解决方案1】:

您必须在 Data2 类中添加另一个属性才能在 DateTime 中获取转换后的数据。

    [JsonIgnore]
    public DateTime created_utc
    {
        get
        {
            var unix = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
            return unix.AddSeconds(this.created_utcUnix);
        }
        set
        {
            var unix = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
            this.created_utcUnix = Convert.ToInt64((value - unix).TotalSeconds);
        }
    }

    [JsonProperty("created_utc")]
    public double created_utcUnix { get; set; }

现在您可以随时在客户端代码中使用 created_utcCustom

新代码:https://pastebin.com/A4GReYHj

【讨论】:

    【解决方案2】:

    虽然@saurabh 有一个好方法。但我认为你可能想要转换它并且不要更改类。

    你可以使用JsonConverter来转换它。

    public class Data2
    {
       [JsonConverter(typeof(UnixConvert))]
       public DateTime created_utc{set;get;}
    }
    

    我有一个 foo 类。 foo 类有一个名为 created_utc 的属性。

        class Foo
        {
            [JsonConverter(typeof(UnixConvert))]
            public DateTime created_utc { set; get; }
        }
    

    UnixConvert 是一个 JsonConverter

        class UnixConvert : JsonConverter
        {
            public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
            {
                var time = ToUnixTimestamp((DateTime) value);
                writer.WriteValue(time);
            }
    
            public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
            {
                long unixTimeStamp = long.Parse(reader.Value.ToString());
                return UnixTimeStampToDateTime(unixTimeStamp);
            }
    
            public override bool CanConvert(Type objectType)
            {
                return true;
            }
    
            private static DateTime UnixTimeStampToDateTime(long unixTimeStamp)
            {
                System.DateTime dtDateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
                dtDateTime = dtDateTime.AddSeconds(unixTimeStamp);
                return dtDateTime;
            }
    
            public static long ToUnixTimestamp(DateTime time)
            {
                var date = new DateTime(1970, 1, 1, 0, 0, 0, time.Kind);
                var unixTimestamp = System.Convert.ToInt64((time - date).TotalSeconds);
    
                return unixTimestamp;
            }
        }
    

    我写了一个测试代码:

            Foo foo = new Foo()
            {
                created_utc = DateTime.Now
            };
            var str = JsonConvert.SerializeObject(foo);
            foo = JsonConvert.DeserializeObject<Foo>(str);
    

    我可以看到它可以运行。

    https://stackoverflow.com/a/28305303/6116637

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-30
      • 2020-10-19
      • 2020-12-23
      • 2016-04-24
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多