如何转换日期时间

本文关键字:日期 时间 转换 何转换 | 更新日期: 2023-09-27 18:06:54

我目前正在从XML文件中提取开始时间,并使用日期检查方法进行过滤,然后显示在Listbox.Itemsource中。

目前开始时间是在"yyyyMMddHHmmss zzz"格式在我的XML文件和我的DateChecking方法也是相同的格式比较工作。

我想做的是将格式从"yyyyMMddHHmmss zzz"转换为长格式"Wednesday 19th June 12:00 PM",并将其显示在列表框中。

代码 #######################################################

namespace TV_Guide_Version2
{
    public partial class TV2 : PhoneApplicationPage
    {
        public TV2()
        {
            InitializeComponent();
        }
        private void PhoneApplicationPage_Loaded_1(object sender, RoutedEventArgs e)
        {
            WebClient c = new WebClient();
            c.DownloadStringCompleted += new DownloadStringCompletedEventHandler(c_DownloadStringCompleted);
            c.DownloadStringAsync(new Uri("http://www.Domain.com/XMLSrouce.xml?"));
        }
        bool MyDateCheckingMethod(string dateString)
        {
            DateTime now = DateTime.Now.Date.Add(DateTime.Now.TimeOfDay);
            DateTime otherDate = DateTime.ParseExact(dateString, "yyyyMMddHHmmss K", null);
            return (now.AddHours(-2) <= otherDate && otherDate <= now.AddHours(24));
        }

        void c_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            if (e.Error != null)
                return;

            var r = XDocument.Parse(e.Result);

            listBox1.ItemsSource = from tv in r.Root.Descendants("programme")
                                   where tv.Attribute("channel").Value == "1201"
                                   where MyDateCheckingMethod(tv.Attribute("start").Value)
                                   let channelE1 = tv.Attribute("channel")
                                   let startE1 = tv.Attribute("start")
                                   let nameEl = tv.Element("title")
                                   orderby tv.Attribute("start").Value ascending
                                   let urlEl = tv.Element("desc")

                                   select new TV1guide

                                   {
                                       DisplayName = nameEl == null ? null : nameEl.Value,
                                       ChannelName = channelE1 == null ? null : channelE1.Value,
                                       ChannelURL = urlEl == null ? null : urlEl.Value,
                                       StartTime = startE1 == null ? (DateTime?)null : DateTime.ParseExact(startE1.Value, "yyyyMMddHHmmss zzz", DateTimeFormatInfo.CurrentInfo, DateTimeStyles.AssumeLocal),

                                   };

        }
        public class TV1guide
        {
            public string DisplayName { get; set; }
            public string ChannelURL { get; set; }
            public string ImageSource { get; set; }
            public DateTime? StartTime { get; set; }
            public DateTime? EndTime { get; set; }
            public string ChannelName { get; set; }
        }


    }
}

如何转换日期时间

这似乎奏效了:

var input = "20110901070000 +1100";
var dateTime = DateTimeOffset.ParseExact(input, "yyyyMMddHHmmss zzz", DateTimeFormatInfo.CurrentInfo);
var longFormat = dateTime.ToString("D");

使用DateTimeOffset更容易处理不同时区的时间。

编辑:

如果我没弄错的话,我想我们要解决两个问题。让我们来分析一下:

  1. 我们想解析一个日期/时间,以便清晰地显示。
  2. 我们想要过滤的日期/时间只显示某些记录。

我认为第一点是确保我们将所有信息转换为正确的数据类型。像这样:

    var data = 
        from tv in r.Root.Descendants("programme")
        where tv.Attribute("channel").Value == "1201"
        let channelE1 = tv.Attribute("channel")
        let startE1 = tv.Attribute("start")
        let nameEl = tv.Element("title")
        orderby tv.Attribute("start").Value ascending
        let urlEl = tv.Element("desc")
        let guide = new TV1guide
        {
            DisplayName = nameEl == null ? null : nameEl.Value,
            ChannelName = channelE1 == null ? null : channelE1.Value,
            ChannelURL = urlEl == null ? null : urlEl.Value,
            StartTime = startE1 == null ? (DateTimeOffset?)null : ParseDate(startE1.Value),
        }
        where DateTimeOffset.Now.AddHours(-2) <= guide.StartTime && guide.StartTime <= DateTimeOffset.Now.AddDays(1)
        select guide;
}
private static DateTimeOffset ParseDate(string value)
{
    return  DateTimeOffset.ParseExact(value, "yyyyMMddHHmmss zzz", DateTimeFormatInfo.CurrentInfo);
}

现在,如果你愿意,你可以在TV1guide上引入另一个属性,以你喜欢的方式显示它:

public string StartTimeDisplay {get { return StartTime.HasValue ? StartTime.Value.ToString("D") : ""; }}

或者如果你觉得把它放在那里太奇怪,你可以把它放在你喜欢的任何地方。关键是现在它已经被解析成TV1guide,你可以在需要的时候显示它。