【问题标题】:How to remove 00:00:00 from DateTime property如何从 DateTime 属性中删除 00:00:00
【发布时间】:2019-06-07 07:09:50
【问题描述】:

我有ListViewDateTime 字段,在Label 上显示00:00:00,这根本不是必需的。

public DateTime? StartDate
{
    get { return _startDate; }
    set
    {
        SetProperty(ref _startDate, value);
        //StartDate = DateTime.ParseExact(StartDate.ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture); NOT WORKING
    }
}

我尝试使用下面的行将其删除但不起作用

StartDate = DateTime.ParseExact(StartDate.ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture); //NOT WORKING

显示它的代码

<StackLayout Orientation="Horizontal">
    <Label HorizontalOptions="Center" VerticalOptions="Center" Text="{Binding StartDate}" />
    <Label HorizontalOptions="Center" VerticalOptions="Center" Text="To" />
    <Label HorizontalOptions="Center" VerticalOptions="Center" Text="{Binding EndDate}" />
</StackLayout>

列表单元:

如何从日期中删除 0:

【问题讨论】:

  • 您想在显示中格式化它,而不是在值中。您可以在属性声明上方使用像 [DataType(DataType.Date)] 这样的元数据
  • @Rafalon - 请检查我更新的问题。
  • 谢谢,也请查看我更新的评论^^
  • 查看 String formatting 的 Xamarin.Forms
  • date.ToShortDateString();或 date.ToString("dd-MM-yyyy");这些方法中的任何一种都可以使用

标签: c# xamarin mvvm xamarin.forms


【解决方案1】:

这不是C#中DateTime的工作方式,让我举个例子:

// This will print '01.01.2000 00:00:00'
Console.WriteLine(DateTime.ParseExact("01/01/1970", "dd/MM/yyy", CultureInfor.InvariantCulture));

这是意料之中的,因为 DateTime 结构中的每个属性在构造函数之后都有一个值,00:00:00 只是默认值。你需要做的是在你显示它的地方格式化它(所以在你的标签中),使用StringFormatformat specifier for DateTime,你可能想要的是d。所以你的 xaml 应该是这样的:

<StackLayout Orientation="Horizontal">
    <Label HorizontalOptions="Center" VerticalOptions="Center" Text="{Binding StartDate, StringFormat='{0:d}'}" />
    <Label HorizontalOptions="Center" VerticalOptions="Center" Text="To" />
    <Label HorizontalOptions="Center" VerticalOptions="Center" Text="{Binding EndDate, StringFormat='{0:d}'}" />
</StackLayout>

【讨论】:

    【解决方案2】:

    您必须在 XAML 上格式化绑定

    https://blogs.msdn.microsoft.com/vsdata/2009/07/06/customize-format-of-datetime-string-in-wpf-and-winform-data-binding/

    https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings

    <Label HorizontalOptions="Center" VerticalOptions="Center" Text="{Binding StartDate, StringFormat='{0:d}'}" />
    

    例如。

    【讨论】:

      【解决方案3】:

      使用 StartDate.ToShortDateString() 而不是 StartDate.ToString()。 ToShortDateString 返回一个字符串,其中包含当前 DateTime 对象的短日期字符串表示形式。

      【讨论】:

      • StartDate 仍将是 DateTime,因此仍将包含时间信息
      【解决方案4】:

      date.ToString("d") 还有其他格式,但“d”是短日期。您需要更改输出字符串,而不是 DateTime 本身。 DateTime 类型包含日期和时间,顾名思义,删除时间是不可能的,但您不需要使用时间。

      【讨论】:

        猜你喜欢
        • 2021-12-22
        • 2023-03-28
        • 2019-03-28
        • 1970-01-01
        • 2011-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-03
        相关资源
        最近更新 更多