C# 如何将世纪前缀添加到出生日期?
试图找出如何在出生日期中添加世纪前缀(19或20)。有人知道如何用更好的方式写这篇文章吗C# 如何将世纪前缀添加到出生日期?,c#,datetime,logic,C#,Datetime,Logic,试图找出如何在出生日期中添加世纪前缀(19或20)。有人知道如何用更好的方式写这篇文章吗 public string GetCenturyPrefix(string socSecNo) { string prefix = string.Empty; try { var currentDate = DateTime.Now; var birthDayTemp = socSecNo.Substring(0, 6); var yy
public string GetCenturyPrefix(string socSecNo)
{
string prefix = string.Empty;
try
{
var currentDate = DateTime.Now;
var birthDayTemp = socSecNo.Substring(0, 6);
var yy = birthDayTemp.Substring(0, 2);
var mm = birthDayTemp.Substring(2, 2);
var dd = birthDayTemp.Substring(4, 2);
birthDayTemp = yy + "-" + mm + "-" + dd;
var birthDay = Convert.ToDateTime(birthDayTemp);
var totalDays = currentDate - birthDay;
var age = totalDays.TotalDays / 365;
var yearsAfter2000 = Convert.ToInt32(currentDate.Year.ToString().Substring(2, 2));
if (age > yearsAfter2000)
{
prefix = "19";
}
else
{
prefix = "20";
}
}
catch (Exception)
{
}
return prefix;
}
你可以像
(year/100)+1那样做,但是把{0:n0}
格式放在你的.ToString({0:n0}”)
中,这可能是逻辑,如果不是,它可以保持这样。这应该适用于任何世纪,就像我在计算器上尝试的那样。不要使用子字符串
将字符串值解析为日期时间。Net为您创建了非常健壮的方法来进行此转换
这里我使用的是DateTime.TryParseExact()
,它允许我指定希望以何种格式提供日期值。该方法返回true或false,指示值是否为提供的格式。不需要使用异常来控制逻辑流
public string GetCenturyPrefix(string socSecNo)
{
// Check if you're able to parse the incoming value
// in the format "yyMMdd".
if (!DateTime.TryParseExact(socSecNo, "yyMMdd", CultureInfo.InvariantCulture,
DateTimeStyles.None, out DateTime parsedDateTime))
{
// Do something if the input can't be parsed in that format.
// In this example I'm throwing an exception, but you can also
// return an empty string.
throw new Exception("Not valid date format");
}
// Extract only the Year portion as a 4 digit string,
// and return the first 2 characters.
return parsedDateTime.ToString("yyyy").Substring(0, 2);
}
为什么要子字符串
-ing字符串以获取日期组件?为什么不直接使用DateTime.Parse(socSecNo)
或.ParseExact(..)
?这段代码有效吗?如果是这样的话,这可能是一个更好的问题,但你应该阅读并确保你对你的整个代码持开放态度birth.Year>=2000
?请回顾一个最著名/相关的C#问题,谢谢你的回复!!但是我如何用这个公式确定centry前缀呢?这只会给出meL(87/100)+1=1,87