我创建了一个API端点.调用者可以使用POST传递相关参数的方法调用API .在参数中有一个datetime格式参数.
问题是,在调用此API时,调用者可以传递datetime3种不同的格式:
long int - 例如1374755180string)string)我必须解析该datetime值并将其转换为DateTime或string以时间戳格式.
我已经尝试使用DateTime.TryParse(),DateTime.Parse(),Convert.ToDateTime()和Convert.ToDouble(),但他们都不在肯定为我工作.
所需的输出必须采用en-GB格式.
我原本以为有一个if-else if-else块可以使用TryParse3次,其中一个else说无法解析字符串.这是最好的解决方案吗?或者有更好的解决方案吗?
请帮忙!
小智 28
你应该考虑要求一个时区.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...");
}
Run Code Online (Sandbox Code Playgroud)
编辑 正如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...");
}
Run Code Online (Sandbox Code Playgroud)
我从另一个问题借来的时代转换. (扩展方法)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
Dar*_*bio 20
您正在寻找DateTime.ParseExact(MSDN文章)
您将在以下情况中使用哪种方式:
string[] formats= { "MM/dd/yyyy hh:mm:ss tt", "yyyy-MM-dd hh:mm:ss" }
var dateTime = DateTime.ParseExact("7/25/2013 6:37:31 PM", formats, new CultureInfo("en-GB"), DateTimeStyles.None);
Run Code Online (Sandbox Code Playgroud)
这允许您根据需要添加任意数量的DateTime格式,array并且该方法将在没有if... else语句的情况下进行转换.
如果您的整数是自Unix Epoch以来的秒数,您可以在Epoch的日期时间(1970年1月1日)中添加秒数(.Net没有开箱即用的方法,但逻辑是秒'时代'):
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(seconds);
Run Code Online (Sandbox Code Playgroud)
从这个问题.
| 归档时间: |
|
| 查看次数: |
28988 次 |
| 最近记录: |