解析多种格式的日期时间

我已经创建了一个API端点。调用方可以使用POST传递相关参数的方法来调用API 。在参数中,有一个datetime格式格式的参数。

问题在于,调用此API时,调用者可能会datetime以3种不同的格式传递:

  1. long int -例如1374755180
  2. 美国格式-例如“ 2013年7月25日下午6:37:31”(如string
  3. 时间戳格式-例如“ 2013-07-25 14:26:00”(作为string

我必须解析该datetime值并将其转换为DateTimestring时间戳格式。

我已经尝试使用DateTime.TryParse()DateTime.Parse()Convert.ToDateTime()Convert.ToDouble(),但他们都不在肯定为我工作。

所需的输出必须为en-GB格式。

回答:

我曾想过要if-else if-

elseTryParse3次一起使用一个块else,说不能解析该字符串。这是最好的解决方案吗?还是有比这更好的解决方案?

请帮忙!

回答:

您应该考虑要求时区。1不需要它,但是#2和#3需要它。

public DateTime ParseRequestDate()

{

// https://stackoverflow.com/questions/2883576/how-do-you-convert-epoch-time-in-c

CultureInfo enUS = new CultureInfo("en-US");

var dt = "1374755180";

//var dt = "7/25/2013 6:37:31 PM";

//var dt = "2013-07-25 14:26:00";

DateTime dateValue;

long dtLong;

// Scenario #1

if (long.TryParse(dt, out dtLong))

return dtLong.FromUnixTime();

// Scenario #2

if (DateTime.TryParseExact(dt, "MM/dd/yyyy hh:mm:ss tt", enUS, DateTimeStyles.None, out dateValue))

return dateValue;

// Scenario #3

if (DateTime.TryParseExact(dt, "yyyy-MM-dd hh:mm:ss", enUS, DateTimeStyles.None, out dateValue))

return dateValue;

throw new SomeException("Don't know how to parse...");

}

正如Matt Johnson指出的那样,DateTime.TryParseExact接受一个格式字符串数组。2&3可能会凝聚。

public DateTime ParseRequestDate()

{

// https://stackoverflow.com/questions/2883576/how-do-you-convert-epoch-time-in-c

CultureInfo enUS = new CultureInfo("en-US");

var dt = "1374755180";

//var dt = "7/25/2013 6:37:31 PM";

//var dt = "2013-07-25 14:26:00";

DateTime dateValue;

long dtLong;

// Scenario #1

if (long.TryParse(dt, out dtLong))

return dtLong.FromUnixTime();

// Scenario #2 & #3

var formatStrings = new string[] { "MM/dd/yyyy hh:mm:ss tt", "yyyy-MM-dd hh:mm:ss" };

if (DateTime.TryParseExact(dt, formatStrings, enUS, DateTimeStyles.None, out dateValue))

return dateValue;

throw new SomeException("Don't know how to parse...");

}

我从另一个问题借来的时代转换。 (扩展方法)

public static class MyExtensions

{

public static DateTime FromUnixTime(this long unixTime)

{

var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

return epoch.AddSeconds(unixTime);

}

}

以上是 解析多种格式的日期时间 的全部内容, 来源链接: utcz.com/qa/417775.html

回到顶部