在数组中的字符串列表中,为获取具有正确时区的正确格式的日期
本文关键字:格式 日期 时区 字符串 数组 列表 获取 | 更新日期: 2023-09-27 18:09:30
我有一组数组。
//this is not hard corded, some times array will have multiple no.of strings in date format.
["vishnu","2016-08-31T18:30:00.000Z","1992","banglore"]
我有一个字符串数组,在这些字符串中有一个是日期格式的字符串。
我需要做一个foreach
,并需要检查哪个字符串是日期格式的。如果我们得到了日期字符串"2016-08-30T18:30:00.000Z"
,我需要将其转换为基本的日期格式,但在正确的时区中,这里的日期是2016-08-31
,但我需要的是
["vishnu","31/8/2016","1992","banglore"]
不是
//check the difference in date!
["vishnu","30/8/2016","1992","banglore"]
目标来自数组,如果string
是日期字符串格式,则将其转换。
public static void Main(string[] args)
{
string inputString = "2016-08-31T18:30:00.000Z";
DateTime enteredDate = DateTime.Parse(inputString);
Console.WriteLine(enteredDate);
DateTime dDate;
if (DateTime.TryParse(inputString, out dDate))
{
DateTime dtx = enteredDate.ToLocalTime();
String.Format("{0:d/MM/yyyy}", dDate);
Console.WriteLine(dtx);
}
else
{
Console.WriteLine("Invalid"); // <-- Control flow goes here
}
// DateTime dt = convertedDate.ToLocalTime();
}
如果需要更正时区的DateTime
,可以使用TimezoneInfo.ConvertTime()
:
string inputString = "2016-08-31T18:30:00.000Z";
DateTime dDate;
if (DateTime.TryParse(inputString, out dDate))
{
DateTime correctedDateTime = TimeZoneInfo.ConvertTime(dDate, TimeZoneInfo.Local);
// write this here back into the array using your format
Console.WriteLine(correctedDateTime.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture));
}
else
{
Console.WriteLine("Invalid"); // <-- Control flow goes here
}
如需进一步参考,请查看此帖子。这个答案的灵感来源于它使用TimeZoneInfo
。
DateTime dDate;
对每个执行此操作
if (DateTime.TryParse(answerString, out dDate))
{
DateTime enteredDate = DateTime.Parse(answerString);
var Date = enteredDate.ToString("dd/MM/yyyy");
answerString = Date;
Console.WriteLine(answerString);
}
else{
//operation
}
感谢mong-zhu
尝试使用DateTimeOffset
而不是DateTime
,因为它是为处理时区而构建的。
这是代码:
string inputString = "2016-08-31T18:30:00.000Z";
DateTimeOffset enteredDate = DateTimeOffset.Parse(inputString);
Console.WriteLine(enteredDate);
DateTimeOffset dtx = enteredDate.ToLocalTime();
Console.WriteLine(dtx);
这将在GMT+09:30为我生成以下内容:
2016/08/31 18:30:00+00:002016年9月1日04:00:00+09:30
要在印度时间获得它,请尝试以下操作:
DateTimeOffset dtx = enteredDate.ToOffset(TimeSpan.FromHours(5.5));
Console.WriteLine(dtx);
我现在拿到2016/09/01 00:00:00 +05:30
。