C# GetExpirationDateString() 以短日期格式返回数据创建问题
C# GetExpirationDateString() returning data in short date format creating issue
我必须使用以下代码检查并确保证书未过期:
if (DateTime.Parse(cert.GetExpirationDateString()) <= DateTime.Now)
{
_logger.Log(LogLevel.Error, "Chain Certificate is Expired");
return false;
}
cert
是 .net 的 X509Certificate class 的实例。
我面临的问题是GetExpirationDateString函数以字符串格式给出到期日期(这取决于当前文化的短日期格式)
如果我机器的短日期格式是DD-MM-YY
它returns到期日期21-12-2030
为21-12-30
,DateTime.Parse
函数转换30
到 1930
(如果到期年份 >30)。
有什么方法可以让我始终以 dd/mm/yyyy
格式获取证书到期以避免此问题?
字符串表示形式年份 30
将始终默认转换为 1930
,并且在解析 DateTime 时永远不会转换为 2030
,无论您如何尝试。你最好的选择是按照@Glorin 的建议去做并使用 X509Certificate2. This type has a constructor that takes an instance of X509Certificate。或者,您可以使用其他构造函数之一生成。这是基于您提供的内容的代码示例:
var cert2 = new X509Certificate2(cert);
if(cert2.NotAfter <= DateTime.Now)
{
_logger.Log(LogLevel.Error, "Chain Certificate is Expired");
return false;
}
你可以试试这个(因为我说的是法语,你的格式可能是 MM/dd/yyyy):
DateTime dt = DateTime.ParseExact(item.GetExpirationDateString(), "dd/MM/yyyy hh:mm:ss", CultureInfo.InvariantCulture);
string s = dt.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
Console.WriteLine(s);
我必须使用以下代码检查并确保证书未过期:
if (DateTime.Parse(cert.GetExpirationDateString()) <= DateTime.Now)
{
_logger.Log(LogLevel.Error, "Chain Certificate is Expired");
return false;
}
cert
是 .net 的 X509Certificate class 的实例。
我面临的问题是GetExpirationDateString函数以字符串格式给出到期日期(这取决于当前文化的短日期格式)
如果我机器的短日期格式是DD-MM-YY
它returns到期日期21-12-2030
为21-12-30
,DateTime.Parse
函数转换30
到 1930
(如果到期年份 >30)。
有什么方法可以让我始终以 dd/mm/yyyy
格式获取证书到期以避免此问题?
字符串表示形式年份 30
将始终默认转换为 1930
,并且在解析 DateTime 时永远不会转换为 2030
,无论您如何尝试。你最好的选择是按照@Glorin 的建议去做并使用 X509Certificate2. This type has a constructor that takes an instance of X509Certificate。或者,您可以使用其他构造函数之一生成。这是基于您提供的内容的代码示例:
var cert2 = new X509Certificate2(cert);
if(cert2.NotAfter <= DateTime.Now)
{
_logger.Log(LogLevel.Error, "Chain Certificate is Expired");
return false;
}
你可以试试这个(因为我说的是法语,你的格式可能是 MM/dd/yyyy):
DateTime dt = DateTime.ParseExact(item.GetExpirationDateString(), "dd/MM/yyyy hh:mm:ss", CultureInfo.InvariantCulture);
string s = dt.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
Console.WriteLine(s);