转换日期时间格式不能正确格式化

时间:2014-06-10 09:10:40

标签: c# asp.net datetime

这个让我觉得自己像个白痴,但我无法弄清楚为什么这个不起作用。

我有字符串

"6/9/2014 9:30:20 AM"

我将此字符串解析为DateTime。

DateTime myTempDate = DateTime.Parse(date);

现在看起来一样,好了,现在我想把它缩短到一个月。

myTempDate.ToString("MMMM");

但结果仍然相同......

我试过Convert.ToDatetime我也试过其他格式,它永远不会改变。

这里发生了什么?

更新:

好吧似乎方法是正确的,我不会疯狂,所以别的东西必须在这里......

如果有帮助,可以提供一些额外信息。 这一切都在Umbraco 7.1.x

中完成

这是在局部视图中发生的。

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@using System.Web.Mvc.Html;
@using Umbraco.Web;
@using System.Globalization;
@{
// Get this blogs root, does not use an id because there may be more thanone blog
IPublishedContent blogRoot = Model.Content.AncestorOrSelf("SmartBlogBlog");
// Get the posts in this blog
IEnumerable<IPublishedContent> posts = blogRoot.Descendants("SmartBlogPost").OrderBy("updateDate");
// Create the tag dictionary
Dictionary<string, int> categoryList = new Dictionary<string, int>();
Dictionary<string, int> dateList = new Dictionary<string, int>();

// Loop through all the posts then loop through their tags to add to the tag dictionary
foreach (IPublishedContent post in posts)
{
    string[] categories = post.GetProperty("smartBlogCategory") != null
        && post.GetProperty("smartBlogCategory").Value != null
        && !string.IsNullOrEmpty(post.GetProperty("smartBlogCategory").Value.ToString())
        ? post.GetProperty("smartBlogCategory").Value.ToString().Split(',') 
        : new string[0];

    string[] dates = post.GetProperty("smartBlogDate") != null
        && post.GetProperty("smartBlogDate").Value != null
        && !string.IsNullOrEmpty(post.GetProperty("smartBlogDate").Value.ToString())
        ? post.GetProperty("smartBlogDate").ToString().Split(',')
        : new string[0];

    foreach (string category in post.GetProperty("smartBlogCategory").Value.ToString().Split(','))
    {
        if (categoryList.ContainsKey(category))
        {
            categoryList[category]++;
        }
        else
        {
            categoryList.Add(category, 1);
        }
    }

    foreach(string date in post.GetProperty("smartBlogDate").Value.ToString().Split(','))
    {
        if(dateList.ContainsKey(date))
        {
            DateTime tempDate = DateTime.Parse(date);
            tempDate.ToString("MMMM");
            string myTempDate = tempDate.ToString();
            dateList[myTempDate]++;
        }
        else
        {               
            DateTime myTempDate = DateTime.Parse(date);
            myTempDate.ToString("MMMM");
            string finalTempDate = myTempDate.ToString();

            dateList.Add(finalTempDate, 1);
        }
    }
}

<span class="smartSubTitle smartTopBorder">Categories</span><br />

// Loop through the tag dictionary
<ul>
    @foreach(KeyValuePair<string, int> category in categoryList)
    {
        //Deal with the tag
        <li>
            <span><a class="smartCategory" href="@Umbraco.NiceUrl(blogRoot.Id)?category=@category.Key">@category.Key</a></span>
            <p>...........................</p>              
        </li>
    }
    @foreach(KeyValuePair<string, int> date in dateList)
    {
        <li>
            <span><a class="smartDate" href="@Umbraco.NiceUrl(blogRoot.Id)?category=@date.Key">@date.Key</a></span>
            <p>...........................</p>              
        </li>
    }

</ul>
}

3 个答案:

答案 0 :(得分:1)

试试这个:

string dt = "6/9/2014 9:30:20 AM";
DateTime dtFinal = DateTime.ParseExact(dt, "d/M/yyyy h:mm:ss tt",
                                                  CultureInfo.InvariantCulture);
String MonthName = dtFinal.ToString("MMMM");

修改

您没有在以下语句中指定ToString()函数的返回值:

tempDate.ToString("MMMM");

您需要将ToString()函数的返回值分配给某个相关变量,如下所示:

String MonthName = tempDate.ToString("MMMM");

答案 1 :(得分:1)

这就是问题所在。您没有使用返回值。 ToString不会修改现有值。它返回一个新字符串。所以代替下面的代码

tempDate.ToString("MMMM");
string myTempDate = tempDate.ToString();

myTempDate.ToString("MMMM");
string finalTempDate = myTempDate.ToString();

将其更改为:

string myTempDate = tempDate.ToString("MMMM");
string finalTempDate = myTempDate.ToString("MMMM");

答案 2 :(得分:0)

<强> TRY

string monthName = myTempDate.ToString("MMMM", CultureInfo.InvariantCulture);

另外

可以替换

DateTime myTempDate = DateTime.Parse(date);

DateTime myTempDate = DateTime.ParseExact(date, "d/M/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);

根据建议/提及:Sudhakar Tillapudi