Как конвертировать изо-дата-время в дату в C#?

Я не могу преобразовать ISODateTime форматировать только значение даты. Я старался Parse, ParseExact а также TryParseExact и все не удалось и продолжайте давать мне одно и то же значение вывода (1984-04-26T00:00:00).

Я сослался на множество ссылок и других вопросов SO, но ни один не помог

Я использую DTO, и это свойство,

public DateTime Dob { get; set; }

Я бегу for цикл для объединения данных из моего LINQ запросы, и я пытаюсь сделать мое преобразование следующим образом,

for (int i = 0; i < PatientInfo.Count; i++)
{
    PatientInfo[i].Dob =
    DateTime.Parse(String.Format("{0:MM/dd/yyyy}", PatientInfo[i].Dob.ToString()));
    PatientInfo[i].PartnerData = PartnerInfo.Where(a => a.FileId == PartnerInfo[i].FileId).ToList();
}

Что мне здесь не хватает?

следующее является API controller код,

[HttpGet("{id}")]
public async Task<IActionResult> GetPatReg([FromRoute] long id)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    var PatientInfo = await _context.PatReg
        .Where(a => a.FileId == id)
        .Select(b => new PatRegDto
        {
            Action = "Get",
            FileId = b.FileId,
            FName = b.FName,
            MName = b.MName,
            LName = b.LName,
            Dob = b.Dob
        }).ToListAsync();
    var PartnerInfo = await _context.PatPar
        .Where(s => s.FileId == id)
        .Select(m => new PatParDto
        {
            RecId = m.RecId,
            FileId = m.FileId,
            ParFileId = m.ParFileId,
            SDate = m.SDate,
            EDate = m.EDate,
        }).ToListAsync();

    for (int i = 0; i < PartnerInfo.Count; i++)

    {
        PartnerInfo[i].FullName = _context.PatReg.Where(a => a.FileId == PartnerInfo[i].ParFileId)
                               .Select(t => new { t.fullname })
                               .Single().fullname;
        PartnerInfo[i].dob = _context.PatReg.Where(a => a.FileId == PartnerInfo[i].ParFileId)
                               .Select(t => new { t.Dob })
                               .Single().Dob;

        PartnerInfo[i].Action = "Get";
    }

    for (int i = 0; i < PatientInfo.Count; i++)

    {
        PatientInfo[i].Dob =
        DateTime.Parse(String.Format("{0:MM/dd/yyyy}", PatientInfo[i].Dob.ToString()));

        PatientInfo[i].PartnerData = PartnerInfo.Where(a => a.FileId == PartnerInfo[i].FileId).ToList();
    }

    if (PatientInfo == null)
    {
        return NotFound();
    }

    var DataRes = new
    {
        sdata = PatientInfo
    };

    return Ok(DataRes);
}

Обновите мои DTOs

    public class PatRegDto

    {
        public string Action { get; set; }
        private Int64 _FileId;
        public Int64 FileId
        {
            get
            {
                return this._FileId;
            }
            set
            {
                this._FileId = value;
            }
        }
        public string FName { get; set; }
        public string MName { get; set; }
        public string LName { get; set; }
        public string fullname
        {
            get { return FName + " " + MName + " " + LName; }
        }
        public DateTime Dob { get; set; }
        public List<PatParDto> PartnerData { get; set; }
    }
    public class PatParDto

    {
        public string Action { get; set; }
        public long RecId { get; set; }
        public long FileId { get; set; }
        public long ParFileId { get; set; }
        public DateTime SDate { get; set; }
        public DateTime? EDate { get; set; }
        public DateTime dob { get; set; }
        public string FullName { get; set; }
    }

3 ответа

Решение

Пожалуйста, не используйте PatientInfo[i].Dob.ToString()) потому что он будет сериализован в строку, используя ваши текущие настройки культуры. В зависимости от настроек языка вашей ОС у вас будет другая строка. Кроме того DateTime содержит свойство Date, которое возвращает дату;)

Еще один ответ на все ценные комментарии выше,

открытый класс PatRegDto

{
    public string Action { get; set; }
    private Int64 _FileId;
    public Int64 FileId
    {
        get
        {
            return this._FileId;
        }
        set
        {
            this._FileId = value;
        }
    }
    public string FName { get; set; }
    public string MName { get; set; }
    public string LName { get; set; }
    public string fullname
    {
        get { return FName + " " + MName + " " + LName; }
    }
    public string Dob { get; set; }
    public List<PatParDto> PartnerData { get; set; }
}

и в контроллере

var PatientInfo = await _context.PatReg
        .Where(a => a.FileId == id)
        .Select(b => new PatRegDto
        {
            Action = "Get",
            FileId = b.FileId,
            FName = b.FName,
            MName = b.MName,
            LName = b.LName,
            Dob = (b.Dob).ToString("dd/M/yyyy"),
        }).ToListAsync();

Так это единственное решение? Я добавляю public string DobFormat { get; set; } к PatRegDtoDTO а потом,

for (int i = 0; i < PatientInfo.Count; i++)

            {
                PatientInfo[i].DobFormat = PatientInfo[i].Dob.ToString("MM/dd/yyyy");
                PatientInfo[i].PartnerData = PartnerInfo.Where(a => a.FileId == PartnerInfo[i].FileId).ToList();

            }
Другие вопросы по тегам