如何在 DateTime.ToString() 中排除秒数

29
我正在一个Windows服务中使用DateTime.Now.ToString(),它给我输出的结果是"7/23/2010 12:35:07 PM"。我想要排除秒部分,只显示到分钟。
那么如何从这个格式中排除秒呢?

请参考以下链接:http://www.csharp-examples.net/string-format-datetime/。 - Kishore Kumar
@Amit,请您标记一个答案,谢谢。 - IEnjoyEatingVegetables
7个回答

53

将其输出为短日期格式:

DateTime.Now.ToString("g")

请查看MSDN文档以获取完整的说明。


这是最佳解决方案,因为它可以在美国英语文化中提供OP想要的内容,但总体上也依赖于文化。 - Noldorin
这个解决方案如何满足这个需求:“我想排除第二部分,只显示到分钟”? - Jan Macháček
@JanMacháček “g”不会打印秒数,但只要线程上的文化设置正确,它就会像问题所要求的那样打印日期和时间。 - Mikael Svenson
2
啊,你说得对 :) 抱歉。大写的"G"代表秒,小写的"g"则代表没有单位。 - Jan Macháček
最佳答案,谢谢 :) "g" 通用日期/时间模式(短时间)。 - Zeek2

22
你需要向ToString()函数传递一个格式化字符串:
DateTime.Now.ToString("g")

这个选项是与文化有关的。

对于这种输出,如果您想要完全控制,也可以使用自定义格式字符串

DateTime.Now.ToString("MM/dd/yyyy hh:mm")

无论文化背景如何,这都会输出完全相同的结果。


9
你可以使用一个格式:format
DateTime.Now.ToString("MM/dd/yyyy hh:mm tt");

2

请测试:

DateTime.Now.ToString("MM/dd/yyyy hh:mm");

0

0

如果您想保持语言无关性,可以使用以下代码(也许在IValueConverter(请参见第二个代码片段)中)仅从字符串中删除秒部分:

int index = dateTimeString.LastIndexOf(':');
if (index > -1) {
    dateTimeString = dateTimeString.Remove(index, 3);
}

这是一个转换器的实现。
[ValueConversion(typeof(DateTime), typeof(string))]
public class DateTimeToStringConverter : Markup.MarkupExtension, IValueConverter {
    public DateTimeToStringConverter() : base() {
        DisplayStyle = Kind.DateAndTime;
        DisplaySeconds = true;
    }

    #region IValueConverter
    public object Convert(object value, Type targetType, object parameter, Globalization.CultureInfo culture) {
        if (value == null) return string.Empty;
        if (!value is DateTime) throw new ArgumentException("The value's type has to be DateTime.", "value");

        DateTime dateTime = (DateTime)value;

        string returnValue = string.Empty;

        switch (DisplayStyle) {
            case Kind.Date:
                returnValue = dateTime.ToShortDateString();
                break;
            case Kind.Time:
                returnValue = dateTime.ToLongTimeString();
                break;
            case Kind.DateAndTime:
                returnValue = dateTime.ToString();
                break;
        }

        if (!DisplaySeconds) {
            int index = returnValue.LastIndexOf(':');

            if (index > -1) {
                returnValue = returnValue.Remove(index, 3);
            }
        }

        return returnValue;
    }

    public object ConvertBack(object value, Type targetType, object parameter, Globalization.CultureInfo culture) {
        throw new NotSupportedException();
    }
    #endregion

    public override object ProvideValue(IServiceProvider serviceProvider) {
        return this;
    }

    #region Properties
    public Kind DisplayStyle { get; set; }

    public bool DisplaySeconds { get; set; }
    #endregion

    public enum Kind {
        Date,
        Time,
        DateAndTime
    }
}

你也可以在XAML中将其用作标记扩展:

<TextBlock Text="{Binding CreationTimestamp, Converter={local:DateTimeToStringConverter DisplayStyle=DateAndTime, DisplaySeconds=False}}" />

-1
尝试一下:DateTime.Now.ToShortDateString() + " " + DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Minute.ToString()

这将仅显示日期部分。您还需要添加ToShortTimeString。 - Mikael Svenson

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