You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XAML中绑定long类型时间戳并格式化为日期显示

XAML时间戳转日期字符串的实现方案

首先明确:你写的那种嵌套绑定传参的XAML语法是不支持的,XAML无法在一个Binding标记里嵌套另一个Binding作为方法参数。下面给你两种常用的可行方案:

方案一:在ViewModel中添加计算属性

如果你的MonkeyViewModel持有Monkey实例的引用(比如命名为CurrentMonkey),可以直接在ViewModel里封装一个格式化后的日期属性:

// MonkeyViewModel中的代码
public string FormattedDateModified
{
    get
    {
        if (CurrentMonkey == null) return string.Empty;
        // 注意:处理Unix毫秒时间戳的转换,避免直接用new DateTime(timestamp)
        var date = DateTimeOffset.FromUnixTimeMilliseconds(CurrentMonkey.DateModified).DateTime;
        return date.ToString("MMMM dd, yyyy"); // 输出格式:May 28, 2023
    }
}

然后在XAML中直接绑定这个属性:

<Label Text="{Binding FormattedDateModified}" />

如果DateModified或CurrentMonkey可能动态变化,记得在对应的属性setter里触发PropertyChanged通知,确保UI更新:

private Monkey _currentMonkey;
public Monkey CurrentMonkey
{
    get => _currentMonkey;
    set
    {
        _currentMonkey = value;
        OnPropertyChanged(nameof(CurrentMonkey));
        OnPropertyChanged(nameof(FormattedDateModified)); // 通知计算属性更新
    }
}

方案二:使用值转换器(推荐,通用复用)

这是XAML处理数据转换的标准方式,适合多个页面/控件复用时间戳转换逻辑:

1. 创建转换器类

public class TimestampToDateTimeConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is long timestamp)
        {
            // 处理Unix毫秒时间戳转DateTime
            var date = DateTimeOffset.FromUnixTimeMilliseconds(timestamp).DateTime;
            // 可通过parameter参数动态传递格式字符串,默认用指定格式
            var format = parameter as string ?? "MMMM dd, yyyy";
            return date.ToString(format, culture);
        }
        return string.Empty;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // 无需双向绑定的话,返回Binding.DoNothing即可
        return Binding.DoNothing;
    }
}

2. 在XAML资源中声明转换器

<ContentPage.Resources>
    <!-- 替换local为你的转换器所在的命名空间 -->
    <local:TimestampToDateTimeConverter x:Key="TimestampConverter" />
</ContentPage.Resources>

3. 在绑定中使用转换器

如果Label的DataContext是Monkey实例:

<Label Text="{Binding DateModified, Converter={StaticResource TimestampConverter}}" />

如果DataContext是MonkeyViewModel,需要指定路径到Monkey的属性:

<Label Text="{Binding CurrentMonkey.DateModified, Converter={StaticResource TimestampConverter}}" />

注意事项

  • 时间戳单位:你提供的1685299649000是Unix毫秒时间戳,.NET的DateTime(long)构造函数接收的是Ticks(100纳秒单位),必须用DateTimeOffset.FromUnixTimeMilliseconds或AddMilliseconds转换,否则会得到错误的日期。
  • 多语言支持:如果需要适配不同地区的日期格式,可利用转换器的culture参数自动适配系统区域设置。

内容的提问来源于stack exchange,提问作者Cheng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:07:54