如何在不将日期转换为字符串的情况下从C#中的datetime中提取日期?
我试图从日期时间字段中提取日期,但在C#中,如果不将其转换为字符串,则无法帮助我这样做 这是我的班级:如何在不将日期转换为字符串的情况下从C#中的datetime中提取日期?,c#,C#,我试图从日期时间字段中提取日期,但在C#中,如果不将其转换为字符串,则无法帮助我这样做 这是我的班级: public class Student_Info { public String Student_Name; public DateTime DateofBirth; } Student_Info student = new Student_Info(); student.Student_Name = "XYZ"; student.Dateof
public class Student_Info
{
public String Student_Name;
public DateTime DateofBirth;
}
Student_Info student = new Student_Info();
student.Student_Name = "XYZ";
student.DateofBirth = Convert.ToDateTime("2019-01-01");
MessageBox.Show(student.Student_Name + "" + student.DateofBirth);
这就是我设置值的方式
我的预期结果是XYZ 2019-01-01
但我得到的是2019年1月1日凌晨12:00:00XYZ
需要帮助吗
提前感谢试试这个
MessageBox.Show(student.Student_Name + "" + student.DateofBirth.ToString("yyyy-MM-dd"));
DateTime
struct始终具有时间组件。有一个Date
属性,它主要执行您要求的操作,但即使是它也隐含了午夜时间
然而,尽管问题文本中说:
不把它转换成字符串
代码示例正在隐式转换为字符串:
MessageBox.Show(student.Student_Name + "" + student.DateofBirth);
在这种情况下,有多种选择:
student.DateofBirth.ToShortDateString()
student.DateofBirth.ToString("d")
student.DateofBirth.ToString("d", CultureInfo.CreateSpecificCulture("de-DE")) //German format. You can put any culture here you need.
student.DateofBirth.ToString("d", CultureInfo.InvariantCulture)
student.DateofBrith.ToString("yyyy-MM-dd")
这里要小心,因为其中一些依赖于操作系统的日期格式,用户可以将其配置为做一些非常奇怪的事情,如果他们真的想做的话
您也可以在消息框
字符串中使用以下任意一项:
MessageBox.Show($"{student.Student_Name}{student.DateofBirth:yyyy-MM-dd}");
MessageBox.Show(string.Format(CultureInfo.InvariantCulture, "{0}{1:d}", student.Student_Name, student.DateofBirth));
最后,每当我看到有人想要创建一个类似ISO-8601日期格式的日期字符串时,我都会有点害怕,这里就是这样。这样做有很多正当的理由。然而,人们想要这样做的一个常见原因恰好也是非常糟糕的:SQL。如果您这样做,那么您可以将其包含在SQL命令字符串中,几乎可以肯定您做了一些非常错误的事情,您需要在做任何其他事情之前后退一步并研究参数化查询。
student.DateofBirth.Date
但这不是c
codeADateTime
始终有时间组件。您可以使用它的Date
属性获取该日期的午夜;如果不使用仅限日期的数据类型,如'sLocalDate
,这将是最接近的结果。这似乎是一个格式问题。只需执行student.DateofBirth.ToString(“yyyy-MM-dd”)
,请注意DateTime
不包含格式,只包含用于指定特定时间点的值。当您要显示字符串表示形式或将字符串解析为DateTime
时,会使用格式设置。DateTime有两个部分:1)从1/1/01开始的完整天数和一天的小数部分,即每24小时的刻度数(100纳秒)。最好的方法是在不同的时间使用ToTicks()方法。我会使用1/1/1 12:00AM、1/1/1 6:00AM、1/1/1 12:00PM和1/2/1 12:00AM。如果你想硬编码值而不是从字符串解析值,你也可以使用new DateTime(2019,1,1)
。那么他可能会使用yyyy-mm-dd而不是dyo。你应该编辑你的答案来说明这一点。(虽然此时您只是在重复一个更完整的答案。)