C#如何按字符分隔字符串字符
我已经解析了从Api到日期字符串及其数据的响应。日期字符串显示为:C#如何按字符分隔字符串字符
"201710010900000"
什么,我试图做的是转换成可以通过date
mm/dd/yyyy
读取做到这一点
我必须抢前4个字母为一年的格式这一点,接下来的2个为月,下2个为天。理想情况下将它们分成日期,月份,日期等单独的字符串。这样它可以被转换成一个字符串。
string reDate = (month + "/" + day + "/" + year);
有没有办法单独调用字符串的每个字符,还是什么话来做到这一点的最好方法是什么?
一个字符串是一个字符数组。就在它遍历或使用一个索引,例如:
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);
DateTime.ParseExact
或DateTime.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);
'MM'是月份,'mm'是分钟,两个都是前导零。 – BurnsBA
我记得几年前曾经提出'/'的建议。有些文化*不会使用'/'作为日期分隔符,例如俄语。 'InvariantCulture'只是“发生”使用美式样式 - 只需使用'd'格式就会产生'MM/dd/yyyy' –
如果你计划在未来,你可以尝试这样的回应“迭代”:
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);
我希望它能帮助,
另一个问题是创建一个新日期来指定输入格式,就像其他人在这里回答的(并且公平地说是一个非常好的方法)。
涓
ParseExact
成DateTime
,然后它表示为一个String
:
string source = "201710010900000";
string result = DateTime
.ParseExact(source, "yyyyMMddHHmmssf", CultureInfo.InvariantCulture)
.ToString("MM'/'dd'/'yyyy");
''/'':D。我知道至少有一种文化使用'.'而不是'/'。烦人。打破了不少流行的CSV解析器,让我告诉你! –
@PanagiotisKanavos是的,如果只有一个标准... – Fildor
@Fildor,是的,它被称为“让客户处理它” –
字符串是字符数组。只需重复一遍即可。你不需要这样做,如果你想把它当作日期来解析的话,你应该这样做。只需使用'DateTime.ParseExact' –
'将其解析为'DateTime'并将其格式化为所需的输出格式? – Fildor
每个字符串都会有所不同,因为我从列表中调用。当前格式是yyyymmddttttttt。 –