在数组中的字符串列表中,为获取具有正确时区的正确格式的日期

本文关键字:格式 日期 时区 字符串 数组 列表 获取 | 更新日期: 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