在Silverlight中使用XAML格式化日期/时间

78

我有一个 Silverlight 4 应用程序。我有一个 C# 的 DateTime 对象,我要将其绑定到 UI 上。我希望这个 DateTime 格式为 dd/mm/yyyy 时间(时区)。例如,今天将显示为:

04/07/2011 at 01:13 p.m. (EST)

有没有办法通过XAML来实现这个?或者我需要构建一个转换器?

6个回答

129
<TextBlock Text="{Binding Date, StringFormat='{}{0:MM/dd/yyyy a\\t h:mm tt}'}" />

将返回您

04/07/2011 下午1:28(-04)


14
我喜欢这些奇怪的字符串格式...谁能记得住它们(指 {}0: 部分)。 - Ignacio Soler Garcia
8
除了格式化字符串周围的引号应该改为单引号之外,这个代码是正确的。<TextBlock Text="{Binding Date, StringFormat={}{0:'MM/dd/yyyy a\t h:mm tt'}}" /> - Dude0001
1
我必须把单引号放在不同的位置:Text="{Binding startDate, StringFormat='{}{0:MM/dd/yy}'}" - JBrooks
1
如果您使用的是 Label 而不是 TextBlock,请记住需要使用 ContentStringFormat 而不是设置 Binding StringFormat。 - Slate
所有这些都适用于文本块或文本框,但在日期选择器内部,格式不起作用。有什么办法可以在日期选择器中实现它? - WPFKK

66

您可以在Silverlight 4中使用StringFormat来自定义绑定值的格式。

日期

日期格式化有大量选项。

对于“2004年4月17日下午1:52:45”的DateTime,

您可以使用一组标准格式(标准格式)...

StringFormat=f : “Saturday, April 17, 2004 1:52 PM”
StringFormat=g : “4/17/2004 1:52 PM”
StringFormat=m : “April 17StringFormat=y : “April, 2004StringFormat=t : “1:52 PM”
StringFormat=u : “2004-04-17 13:52:45Z”
StringFormat=o : “2004-04-17T13:52:45.0000000

...或者您可以使用字母创建自己的日期格式(自定义格式)

StringFormat=’MM/dd/yy’ : “04/17/04StringFormat=’MMMM dd, yyyy g’ : “April 17, 2004 A.D.”
StringFormat=’hh:mm:ss.fff tt’ : “01:52:45.000 PM”

11
你也可以仅使用 <\p>。
StringFormat=d

在您的数据网格列中显示日期时间

最终它会是这样的

   <sdk:DataGridTextColumn  Binding="{Binding Path=DeliveryDate,StringFormat=d}" Header="Delivery date" Width="*" />

输出将类似于

在此输入图片描述


如果我想要日/月/年呢? - javi
1
使用 StringFormat = dd-MMMM-yy。 - Mohammad Atiour Islam

7
在SL5中,我发现这个可以工作:
<TextBlock Name="textBlock" Text="{Binding JustificationDate, StringFormat=dd-MMMM-yy hh:mm}">
<TextBlock Name="textBlock" Text="{Binding JustificationDate, StringFormat='Justification Date: \{0:dd-MMMM-yy hh:mm\}'}">

6

C#: 试试这个

  • yyyy(yy/yyy) - 年份
  • MM - 月份(例如“03”),MMMM - 月份(例如“三月”)
  • dd - 日(例如“09”),ddd/dddd - 日(星期日/周日)
  • hh - 12小时制的小时(上午/下午),HH - 24小时制的小时
  • mm - 分钟
  • ss - 秒

使用一些分隔符,像这样:

  1. MessageBox.Show(DateValue.ToString("yyyy-MM-dd")); 示例结果:“2014-09-30”
  2. 空格式字符串: MessageBox.Show(DateValue.ToString()); 示例结果:“2014年9月30日 下午12:00:00”

“MessageBox.Show(DateValue.ToString())” 的输出结果取决于执行它的线程的文化环境(如果未设置,则为系统文化环境)。 - Felix D.

2

对我来说,这个方法有效:

<TextBlock Text="{Binding Date , StringFormat=g}" Width="130"/>

如果想要显示秒钟并使用大写的 G 而不是小写的 g:
<TextBlock Text="{Binding Date , StringFormat=G}" Width="130"/>

此外,如果想要将日期类型更改为另一种类型,例如波斯语,可以使用语言进行转换:
<TextBlock Text="{Binding Date , StringFormat=G}" Width="130" Language="fa-IR"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接