如何转换日期时间
本文关键字:日期 时间 转换 何转换 | 更新日期: 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
更容易处理不同时区的时间。
编辑:
如果我没弄错的话,我想我们要解决两个问题。让我们来分析一下:
- 我们想解析一个日期/时间,以便清晰地显示。
- 我们想要过滤的日期/时间只显示某些记录。
我认为第一点是确保我们将所有信息转换为正确的数据类型。像这样:
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
,你可以在需要的时候显示它。