写入StringBuilder时出现意外的日期格式

时间:2016-12-01 16:06:19

标签: c# csv

我正在构建一个带有日期类型列的StringBuilder,并使用我的格式YYYY-MM-DD附加一些日期。

稍后,我将其转换为byte [],然后从中创建一个.csv文件:

public ActionResult DownloadUsersDates()
{
    string data = Encoding.UTF8.GetBytes(GetAllDates());
    var res = Encoding.UTF8.GetPreamble().Concat(data).ToArray();
    return File(res, "text/csv", "DatesList.csv");
}

public string GetAllDates()
{
    var sb = new StringBuilder();
    const string separater = ",";
    const string columnEscaper = "\"";

    sb.Append("Date");

    //Doing some code...

    foreach (var item in myItems)
    {
         sb.Append(columnEscaper);
         sb.Append((item.BirthDate.ToString("yyyy-MM-dd"))); //returns dates of format: `YYYY-MM-DD`
         sb.Append(columnEscaper);
         sb.Append(separater);
         sb.Append("\r");
    }
}

问题是它会更改我的格式并将其另存为另一种格式:DD/MM/YYYY

我知道我需要以某种方式更改列格式单元格。我该怎么办?

提前致谢。

2 个答案:

答案 0 :(得分:1)

  

问题是它改变了我的格式并将其保存为另一种格式:DD / MM / YYYY。

我认为这是不正确的。如果您在文本编辑器(而不是Excel)中打开文件,它将是yyyy-MM-dd。

让我们看看以下* .csv文件:

enter image description here

这是它在澳大利亚的Excel 2016中呈现的方式。

enter image description here

Excel识别出该字符串是日期,并根据您的本地设置格式化单元格。您看到的内容与Windows设置不同的人所看到的不同。

让我们改变列的格式。

enter image description here

enter image description here

答案 1 :(得分:0)

你可以试试这个。我希望它和你的需要一样。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;


namespace ExportToCSV.Controllers
{    
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {                        
            byte[] data = Encoding.UTF8.GetBytes(GetAllDates());
            var res = Encoding.UTF8.GetPreamble().Concat(data).ToArray();
            return File(res, "text/csv", "DatesList.csv");
        }

        public string GetAllDates()
        {
            var sb = new StringBuilder();
            sb.AppendLine("Date");

            foreach (var item in Clients.clients)
            { 
                sb.Append("'");              
                sb.Append((item.Dob.ToString("yyyy-MM-dd"))); //returns dates of format: `YYYY-MM-DD`             
                sb.Append("',");
                sb.Append("\n");
            }
            return sb.ToString();
        }

    }

    public class Clients
    {
        public string FirstName { set; get; }
        public string LastName { set; get; }
        public string Email { set; get; }
        public DateTime Dob { set; get; }
        public Clients(string firstname, string lastname, DateTime dob, string email)
        {
            this.FirstName = firstname;
            this.LastName = lastname;
            this.Dob = dob;
            this.Email = email;
        }

        public static List<Clients> clients = new List<Clients>
            {
                 new Clients ( "Adam",  "Bielecki",  DateTime.Parse("22-05-1986"),  "adamb@example.com" ),
                 new Clients (  "George1", "Smith",  DateTime.Parse("10-10-1990"),  "george@example.com" ),
                 new Clients (  "George2", "Smith",  DateTime.Parse("10-05-1992"),  "george@example.com" ),
                 new Clients (  "George3", "Smith",  DateTime.Parse("08-12-1998"),  "george@example.com" )
            };
    }
}