使用多种语言的日期格式

时间:2013-11-12 09:29:58

标签: xml asp.net-mvc-4 date

我有2个简单的xml文件来向网站MVC4提供新闻报道。我有一个用英语,一个用格鲁吉亚语

实施例

<ITEM id="7" Title="English"
    Content="English Content"
    dt ="02/11/2013">
</ITEM>

<ITEM id="7" Title="ქართული"
    Content="ქართული შინაარსი"
    dt ="02/11/2013">
</ITEM>

我创建了一个模型来放入数据,NB我在这里设置了一个日期格式:

public class NewsModel
{
    public Int32 id { get; set; }
    public String Title { get; set; }
    public String Content { get; set; }
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    public DateTime DT { get; set; }
}

我有一个ViewModel,它提供一个列表并确定我需要哪种语言:

public NewsListModel()
    {
        try
        {
            String cultureStr = HttpContext.Current.Session["Culture"].ToString();

            if (cultureStr == "en-GB" || cultureStr == "en-US")
            {
                xmlurl = "http://localhost:1703/News/NewsENG.xml";
            }
            else
            {
                xmlurl = "http://localhost:1703/News/NewsGEO.xml";
            }
        }
        catch
        {
            xmlurl = "http://localhost:1703/News/NewsGEO.xml";
        }

        _newslist = new ObservableCollection<NewsModel>();

        XmlDocument doc = new XmlDocument();
        doc.Load(xmlurl);

        XmlNode ItemListNode = doc.SelectSingleNode("ITEMS");
        XmlNodeList ItemNodes = ItemListNode.SelectNodes("ITEM");

        foreach (XmlNode i in ItemNodes)
        {
            NewsModel n = new NewsModel();
            n.id = Convert.ToInt32(i.Attributes.GetNamedItem("id").Value);
            n.Title = i.Attributes.GetNamedItem("Title").Value.ToString();
            n.Content = i.Attributes.GetNamedItem("Content").Value.ToString();
            n.DT = Convert.ToDateTime(i.Attributes.GetNamedItem("dt").Value);
            _newslist.Add(n);
        }
    }

然后我在页面中显示:

@itm.DT.Date.ToShortDateString()

我的问题是我的日期格式因使用的语言而异,即

enter image description here enter image description here

删除.ToShortDateString()具有相同的分隔符问题并显示时间。

我现在已经看过这么多次了。我似乎对每个文件做了同样的事情。有没有人有类似的经验和/或分辨率,以便两个日期格式显示相同的“/”作为分隔符。

提前谢谢。

2 个答案:

答案 0 :(得分:0)

您可以简单地将所需的文化或格式添加到模型中(到模型的根目录,而不是列表中的每个元素)。

然后,只需在视图中使用文化或格式,如下所示:

  @itm.DT.Date.ToShortDateString(/* here the format/culture*/ Model.Culture)

通过这种方式,你不依赖任何魔法......

如果您希望列表中的echa项使用不同的格式,请将格式文化添加到每个元素。

当你无法自动获得它时......要明确。

答案 1 :(得分:0)

请尝试此操作(假设您的模型具有Items类型的IEnumerable<NewsModel>属性:

@Html.DisplayFor(model => model.Items[index].DT) // index from a for loop

直接撰写DisplayFormatAttribute

时,DT @itm.DT会被忽略