格式化字符串以正确显示日期

时间:2009-07-27 15:34:40

标签: c# datetime string formatting iformatprovider

我需要帮助将此字符串 - > 20090727 10:16:36:643 转换为 - > 07/27/2009 10:16:36

SynchronizationAgent.LastUpdated()函数返回原始日期和时间,该函数返回上述格式的字符串。


原始问题:保存以供参考

我有 - >

 HUD.LastSyncDate = mergeSubscription.SynchronizationAgent.LastUpdatedTime;

这是设置一个类似 - >

的属性
public static string LastSyncDate
    {
        get { return _lastSyncDate; }
        set
        {
            _lastSyncDate = String.Format(CultureInfo.InvariantCulture,"{0:G}", value);
        }
    }

不幸的是,无论是否有String.Format,显示的日期都显示为 - > 20090727 10:16:36:643

我尝试了多种变体来按照我想要的方式对其进行格式化。我错过了什么?

基于以下建议(主要是Joel的),我实施了建议的更改,但我仍然得到"String is not a valid DateTime error"

我也试过实现这个 - >

HUD.LastSyncDate = DateTime.ParseExact(mergeSubscription.SynchronizationAgent.LastUpdatedTime,"yyyyMMdd HH:mm:ss:fff",CultureInfo.InvariantCulture);

但仍然没有。

3 个答案:

答案 0 :(得分:4)

HUD.LastSyncDate = DateTime.Parse(mergeSubscription.SynchronizationAgent.LastUpdatedTime).ToString("MM/dd/yyyy")

您可以将任何format string放在那里。但听起来你真正想要的更像是这样:

private static DateTime _lastSyncDate;
public static DateTime LastSyncDate
{
    get { return _lastSyncDate; }
    set { _lastSyncDate = value;}
}

public static string LastSyncDateString
{
    get { return LastSyncDate.ToString("MM/dd/yyyy"); }
}

将其作为日期时间保留在后台,只需使用字符串属性进行显示。

答案 1 :(得分:1)

在我看来,LastUpdatedTime实际上是一个字符串(因为你可以进行分配)而不是DateTime。在这种情况下,应用的格式不会做任何事情。您需要将LastUpdatedTime解析为DateTime,然后在将其分配给字符串之前重新格式化为所需的格式。

DateTime lastUpdated = DateTime.Parse( mergeSubscription.SynchronizationAgent.LastUpdatedTime );
HUD.LastSyncDate = string.Format( "{0:G}", lastUpdated );

public static string LastSyncDate { get; set; }

请注意,您可能需要使用ParseExact。

DateTime lastUpdated = DateTime.ParseExact( "yyyyMMdd HH:mm:ss:fff",
                                            ...,
                                            CultureInfo.InvariantCulture );

答案 2 :(得分:0)

你想做什么?你得到一个字符串,将其传递给String.Format()并将其存储在字符串字段中。你想重新格式化字符串吗?在这种情况下,您必须将字符串解析回DateTime并再次格式化此值。

DateTime dateTime;
if (DateTime.TryParse(value, out dateTime))
{
    lastSyncDate = String.Format(CultureInfo.InvariantCulture,"{0:G}", dateTime);
}
else
{
    HandleInvalidInput(value);
}