将整数值解析为日期时间
本文关键字:日期 时间 整数 | 更新日期: 2023-09-27 18:18:43
我把日期表示为整数,如20140820
,我想将其解析为日期时间,如2014.08.20。
我是否需要使用 index 解析每个整数值 (2014((08((02(,还是有更简单的方法?
如果您的CurrentCulture
支持yyyyMMdd
格式作为标准日期和时间格式,则可以使用DateTime.Parse
方法,例如;
int i = 20140820;
DateTime dt = DateTime.Parse(i.ToString());
如果不支持,则需要使用DateTime.ParseExact
或DateTime.TryParseExact
方法将其解析为自定义日期和时间格式。
int i = 20140820;
DateTime dt;
if(DateTime.TryParseExact(i.ToString(), "yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None, out dt))
{
Console.WriteLine(dt);
}
然后,您可以使用.ToString()
方法格式化DateTime
,例如;
string formattedDateTime = dt.ToString("yyyy.MM.dd", CultureInfo.InvariantCulture);
最简单和最高性能的方法是:
int date = 20140820;
int d = date % 100;
int m = (date / 100) % 100;
int y = date / 10000;
var result = new DateTime(y, m, d);
试试这个:-
string time = "20140820";
DateTime theTime= DateTime.ParseExact(time,
"yyyyMMdd",
CultureInfo.InvariantCulture,
DateTimeStyles.None);
或
string str = "20140820";
string[] format = {"yyyyMMdd"};
DateTime date;
DateTime.TryParseExact(str,
format,
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None,
out date))
现在date
变量将具有必需的converted date of string '20140820'
int sampleDate = 20140820;
var dateFormat = DateTime.ParseExact(sampleDate.ToString(), "yyyyMMdd",
CultureInfo.InvariantCulture).ToString("yyyy.MM.dd");
结果:
2014年08月20
因此,我们有两个相互竞争的实现,
using System;
using System.Globalization;
public class Program
{
public static void Main()
{
int i = 20140820;
Console.WriteLine($"StringParse:{StringParse.Parse(i)}");
Console.WriteLine($"MathParse:{MathParse.Parse(i)}");
}
}
public static class StringParse
{
public static DateTime Parse(int i)
{
return DateTime.ParseExact(
i.ToString().AsSpan(),
"yyyyMMdd".AsSpan(),
CultureInfo.InvariantCulture);
}
}
public static class MathParse
{
public static DateTime Parse(int i)
{
return new DateTime(
Math.DivRem(Math.DivRem(i, 100, out var day), 100, out var month),
month,
day);
}
}
字符串方法可能更安全,并且可能更好地处理边缘情况。两者都会很快,不太可能成为性能瓶颈,但我未经测试的断言是数学方法可能具有更好的性能。