转换日期时间

3

可能重复:
如何在C#中将DateTime对象转换为dd/mm/yyyy?

我是c#的新手,希望有人能帮助我整理一下代码。

我有以下方法,它将一个DateTime转换为自定义事件字符串,例如30th of Jan 2012 转换为 201201 (忽略天数)

public ConvertToEventDate(DateTime date)
{   
    var year = date.Year.ToString();
    var month = date.Month.ToString();
    month = month.Length == 2 ? month : "0" + month;
    return year + month;
}

我在想是否有更好的方法来进行这种转换。

以上代码无法编译 - 函数签名中未定义返回类型。 - Oded
4个回答

2

我不喜欢上面的修改,我不明白将其放在函数中的意义所在。仅使用MyDateTimeObject.ToString("yyyyMM")更容易阅读,将其封装在一个新函数中没有任何附加价值。 - Dan
它在一个函数中,因为原始发布者将其放在了一个函数中。 - Oded
这个OP要求更整洁的代码。我认为调用date.ToString("yyyyMM")比调用ConvertToEventDate(date)更加整洁和清晰。 - Dan
没有什么能阻止你编辑回去。但至少要保持正确的大小写。 - Oded
想一想,我猜把它放在一个函数中可以更容易地在未来改变事件日期格式。所以我明白你的想法。 - Dan

2
我会这样做:
public string ConvertToEventDate(DateTime date)
{   
    return date.ToString("yyyyMM");
}

你也可以将这个放到扩展方法中,像这样:
public static class ExtenstionMethods
{
    public static string ToEventDate(this DateTime date)
    {
        return date.ToString("yyyyMM");
    }
}

然后像这样调用它:

DateTime date = new DateTime(2012, 30, 1);

    date.ToEventDate();

相对于这个,
ConvertToEventDate(date);

我喜欢扩展方法的想法,因为它被从代码的各个地方调用,所以我更喜欢将其集中管理。 - user1622452

2

有人建议使用ToString("yyyyMM"),这基本上已经可以了 - 但我建议您可能希望指定不变的区域性。否则,如果线程的当前文化使用非公历日历,则可能会得到您不希望看到的月份/年份。因此,我会使用以下代码:

string text = date.ToString("yyyyMM", CultureInfo.InvariantCulture);

如果您想更改确切的格式,请参阅自定义日期和时间格式字符串的文档以获取更多信息。


0

尝试

return date.ToString("yyyyMM");

1
“Format”? 你是指“ToString”吗? - Oded

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