我有一个WPF TextBox,其xpath绑定字符串日期:
<TextBox Grid.Column="3" Grid.Row="1" Margin="0 0 0 2" IsReadOnly="True"
Text="{Binding XPath='ns:data_creazione/text()'}" />
当应用程序运行时,我会看到如下值:
2016-06-13 22:00:00.000+0000
我需要根据MachineInfo机器以“可读”格式格式化日期,我还需要将时间“转换”到本地时区,所以我制作了一个转换器:
using System;
using System.Globalization;
namespace MyNamespace.Converter.General
{
class DateTimeToLocalTimezoneConverter : System.Windows.Data.IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string dateFormat = "yyyy-MM-dd'T'HH:mm:ss.fffzzz";
CultureInfo currentCulture = CultureInfo.CurrentCulture;
var date = value as string;
DateTime valueDate;
if (DateTime.TryParseExact(date, dateFormat, currentCulture, DateTimeStyles.None, out valueDate))
{
return String.Format("{0:f}", valueDate.ToString(currentCulture));
}
return "";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
在xaml中我添加了静态资源声明,我修改了TextBox,如下所示:
<TextBox Grid.Column="3" Grid.Row="1" Margin="0 0 0 2" IsReadOnly="True"
Text="{Binding XPath='ns:data_creazione/text()',
Converter={StaticResource DateTimeToLocalTimezoneConverter}}" />
运行代码,在我的窗口中我看到一个空的TextBox。在Convert方法中添加断点我可以看到该值被截断,并且TryParseExact在解析日期时返回false。 在价值参数中,我可以看到:
2017-02-27T17:06:06
怎么了? 任何帮助将不胜感激。
答案 0 :(得分:0)
您应该能够将DateTime.TryParse
方法与CultureInfo.InvariantCulture
和DateTimeStyles.AdjustToUniversal
一起使用:
if (DateTime.TryParse(date, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out valueDate))
{
return String.Format("{0:f}", valueDate.ToString(currentCulture));
}
工作示例代码:
CultureInfo currentCulture = CultureInfo.CurrentCulture;
string date = "2016-06-13 22:00:00.000+0000";
DateTime valueDate;
if (DateTime.TryParse(date, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out valueDate))
{
string s = String.Format("{0:f}", valueDate.ToString(currentCulture));
}