Как конвертировать изо-дата-время в дату в C#?
Я не могу преобразовать ISO
DateTime
форматировать только значение даты. Я старался 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; }
к PatRegDto
DTO
а потом,
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();
}