C#如何逐字符分隔字符串

时间:2017-10-10 12:34:42

标签: c# string parsing

我已将Api的响应解析为日期字符串及其数据。日期字符串显示为:

"201710010900000"   

我想要做的是将其转换为date mm/dd/yyyy可以读取的格式

我必须抓住前4个字母作为年份,接下来的2个作为月份,接下来的2个作为日期。理想情况下,将这些称为日期,月份,日期的单独字符串。这样它就可以转换成一个字符串。

string reDate = (month + "/" + day + "/" + year);

有没有办法单独调用字符串的每个字符,或者最好的方法是什么?

4 个答案:

答案 0 :(得分:8)

字符串是一个字符数组。只需迭代它或使用索引器,例如:

var someChar="201710010900000"[0];

如果您想将此解析为日期,则不需要这样做。只需使用DateTime.ParseExact,例如:

var input="201710010900000";
var format="yyyyMMddHHmmssf";
var date=DateTime.ParseExact(input,format,CultureInfo.InvariantCulture);

其他重载允许您指定多种格式,例如this one

如果转换失败,ParseExact将抛出异常。如果您希望这是常见现象,可以使用TryParseExact

var styles=DateTimeStyles.None;
var culture=CultureInfo.InvariantCulture;
if (DateTime.TryParseExact(input,format,culture,styles,out var date))
{
    //Do something with the date
}

获得DateTime值后,您可以使用the standard string formatting mechanisms在所需的文化中生成具有所需格式的字符串。

如果您想要美式短日期,可以写下以下任何一种:

var targetCulture = CultureInfo.GetCultureInfo("en-US");
var text1=date.ToString("d",targetCulture);
var text2=String.Format(targetCulture,"This is my date: {0:d}",result);

答案 1 :(得分:6)

为此目的

DateTime.ParseExactDateTime.TryParseExact

DateTime dt;
bool validDate = DateTime.TryParseExact("201710010900000", "yyyyMMddHHmmssf", null, DateTimeStyles.None, out dt);

要分隔日,月等,您只需使用可用的属性:

int year = dt.Year;
int month = dt.Month;
int day = dt.Day;
int hour = dt.Hour;

如果您希望使用此格式的返回字符串:month+"/"+ day+"/"+year使用DateTime.ToString

string returnString = dt.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture);

答案 2 :(得分:3)

ParseExact加入DateTime,然后将其表示为String

  string source = "201710010900000";

  string result = DateTime
    .ParseExact(source, "yyyyMMddHHmmssf", CultureInfo.InvariantCulture)
    .ToString("MM'/'dd'/'yyyy");

答案 3 :(得分:1)

如果您的计划要反复进行。在回复中你可以尝试类似的东西:

var input = "201710010900000";
var year = Convert.ToInt32(input.Substring(0, 4));
var month = Convert.ToInt32(input.Substring(4, 2));
var day = Convert.ToInt32(input.Substring(6, 2));
var hour = Convert.ToInt32(input.Substring(8, 2));
var minutes = Convert.ToInt32(input.Substring(10, 2));
var seconds = Convert.ToInt32(input.Substring(12, 2));

var date = new DateTime(year, month, day, hour, minutes, seconds);
Console.WriteLine(date);

我希望它有所帮助,

另一个方法是创建一个新的日期,指定其他人在这里回答的输入格式(并且公平地说是非常好的方法)。