首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将System.Globalization.DateTimeFormatInfo短日期格式转换为Windows.Globalization.DateTimeFormatting.DateTimeFormatter

将System.Globalization.DateTimeFormatInfo短日期格式转换为Windows.Globalization.DateTimeFormatting.DateTimeFormatter
EN

Stack Overflow用户
提问于 2018-08-31 02:36:56
回答 2查看 451关注 0票数 0

我正在使用UWP中的CalendarDatePicker控件。日期的格式应本地化为用户选择的区域性,该区域性不必与操作系统语言设置相同。我希望日期格式与myCultureInfo.DateTimeFormat.ShortDatePattern相同(例如mm/dd/yyyy)。CalendarDatePicker公开了一个应采用类似于{month.integer}‎/‎{day.integer}‎/‎{year.full}.的格式的DateFormat属性我需要一个用于XAML绑定的转换器。似乎应该有一种简单的方法来做到这一点。

代码语言:javascript
复制
<!-- In XAML -->
<CalendarDatePicker
    FirstDayOfWeek="{x:Bind ViewModel.CalendarFirstDayOfWeek, Mode=OneTime, Converter={StaticResource SystemDayOfWeekToWindowsDayOfWeekConverter}}"
    DateFormat="{x:Bind ViewModel.DateFormat, Mode=OneWay, Converter={StaticResource DateTimeFormatToDateTimeFormatterTemplateConverter}"
    Date="{x:Bind ViewModel.Date, Mode=TwoWay, Converter={StaticResource DateTimeToDateTimeOffsetConverter}}"/>

//Converter
public class DateTimeFormatToDateTimeFormatterTemplateConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        //What goes here?
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

编辑:理想情况下,CalendarDatePicker应该只有一个CultureInfo属性来处理所有这些事情。我尝试了Language属性,但没有明显的效果。

EN

回答 2

Stack Overflow用户

发布于 2018-09-03 12:11:19

是的,您可以通过使用CalendarDatePickerDateTimeFormatter属性来设置CalendarDatePickerDateFormat,该属性告诉DateTimeFormatter如何通过提供格式模板或格式模式的字符串来格式化值。Language属性用于获取或设置应用于CalendarDatePicker的本地化/全球化语言信息。

具有shortdate DateFormat属性的不同Language也可能具有不同的日期格式。你可以看到语言en-USfr-FR的不同。

代码语言:javascript
复制
<StackPanel>
    <CalendarDatePicker Language="en-US" DateFormat="shortdate"/>
    <CalendarDatePicker Language="fr-FR" DateFormat="shortdate"/>
</StackPanel>

因此,您可能需要使用CultureInfo类来获取当前区域性。

对于DateFormat转换,你可以从你的设备设置应用程序中获得所有的ShortTimePattern:Settings=> time & Language=> Data& time => Change date => Time format,在Short date部件中,你可以看到所有的格式。然后根据ShortTimePattern返回对应的DateFormat字符串。下面是一些代码示例:

代码语言:javascript
复制
var shortDataPattern = CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern;
Debug.WriteLine(shortDataPattern);
        switch (shortDataPattern)
        {
            case "M/d/yyyy":
                // return "shortdate" or the following
                return "{}{month.integer}‎/‎{day.integer}‎/‎{year.full}";
            case "M/d/yy":
                return ...
            ...//Other format
        }
票数 1
EN

Stack Overflow用户

发布于 2018-09-04 21:04:53

对于在这里尝试的任何人来说,这至少会本地化日期格式和星期的第一天,但不会本地化月份的名称:

代码语言:javascript
复制
<CalendarDatePicker
    Language="{x:Bind ViewModel.CalendarLanguageCode, Mode=OneWay}"
    FirstDayOfWeek="{x:Bind ViewModel.CalendarFirstDayOfWeek, Mode=OneTime, Converter={StaticResource SystemDayOfWeekToWindowsDayOfWeekConverter}}"
    DateFormat="shortdate"
    Date="{x:Bind ViewModel.Date, Mode=TwoWay}"/>

( SystemDayOfWeekToWindowsDayOfWeekConverter的实现是从System.DayOfWeek到Windows.Globalization.DayOfWeek的简单转换)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52103406

复制
相关文章

相似问题

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