我的字符串如10130060 / 151015 / 0017164
想要将字符串的粗体部分转换为日期
即15/10/2015
答案 0 :(得分:3)
目前还不完全清楚,但如果你说带有粗体部分,,如果你的意思是总是在第一个timeStamp,elapsed,label,responseCode,Latency
1447675626444,9,API1,201,9
1447675626454,1151,API2,404,Not Found,1151
和第二个/
字符之间,您可以使用/
拆分字符串,然后使用ParseExact
方法将其解析为/
。
DateTime
但请记住,正如其他人评论的那样,由于您需要使用yy
format specifier,因此此说明符使用提供的文化Calendar.TwoDigitYearMax
property。
此属性允许将2位数年份正确翻译为a 4位数年份。例如,如果此属性设置为2029,则 100年的范围是从1930年到2029年。因此,2位数值为30 被解释为1930年,而2位数值29被解释为 2029。
对于var s = "10130060/151015/0017164";
var dt = DateTime.ParseExact(s.Split('/')[1], "ddMMyy", CultureInfo.InvariantCulture);
Console.WriteLine(dt); // 15/10/2015
,它设置为InvariantCulture
。这就是为什么2029
将被解析为15
但2015
将被解析为76
的原因。
顺便说一句,我的解决方案无效如果您的单日和月份数字没有1976
或51015
leading zero。在这种情况下,您需要使用15515
和/或d
格式说明符。
thanx的答案,但问题是这个数据是由 用户在运行时,它将采用ddmmyy格式,即年份部分 是固定的,只会是本世纪。
首先,M
和mm
说明符不相同。 MM
说明符是分钟,但mm
说明符是几个月。所有custom date and time specifiers都区分大小写。
如果您总是想解析21世纪的两位数年份,您可以Clone
将使用公历作为MM
属性的文化Calendar
设置为InvariantCulture
,将其设置为&#39} TwoDigitYearMax
属性为2099
,并在解析字符串时使用 克隆文化。
var clone = (CultureInfo)CultureInfo.InvariantCulture.Clone();
clone.Calendar.TwoDigitYearMax = 2099;
var dt = DateTime.ParseExact(s.Split('/')[1], "ddMMyy", clone);
您的151015
将解析为15/10/2015
,而您的151076
将解析为15/10/2076
。
答案 1 :(得分:0)
我会把字符串比特分开。这是一个返回字符串数组的函数。每个字符串的长度都相同。
public static string[] SplitBitforBit(string text, int bitforbit)
{
int splitcount = Convert.ToInt32(RoundAt(text.Length / bitforbit, 0, 0));
char[] allChars = text.ToCharArray();
string[] splitted = new string[splitcount];
int iL = 0;
for (int i = 0; i != splitted.Length; i++)
{
splitted[i] = null;
for (int j = 0; j != bitforbit; j++)
{
splitted[i] += allChars[iL];
iL++;
}
}
return splitted;
}
如果将Position和startUp设置为0,RoundAt方法将自动向上舍入:
public static double RoundAt(double Number, int Position, int startUp)
{
double Up = Math.Abs(Number) * Math.Pow(10, Position);
double temp = Up;
double Out;
while (Up > 0)
{
Up--;
}
Out = temp - Up; //Up
if (Up < (Convert.ToDouble(startUp) - 10) / 10)
{ Out = temp - Up - 1; } //Down
if (Number < 0)
{ Out *= -1; }
Out /= Math.Pow(10, Position);
return Out;
}
示例:
string yourString = "171115";
string[] splitted = SplitBitforBit(yourString, 2);
int day = Convert.ToInt32(splitted[0]);
int month = Convert.ToInt32(splitted[1]);
int year = 2000 + Convert.ToInt32(splitted[2]);//!!! just for years since 2000
DateTime yourDate = new DateTime(year, month, day);
Console.WriteLine(yourDate);
Console.ReadLine();