我有GetDateTimeOffset(字符串纬度,字符串经度,字符串日期时间)Web服务,它根据Lat / Long和本地DateTime确定时间偏移。
我们当前的客户端网页使用DateTimePicker插件http://trentrichardson.com/examples/timepicker/。我们使用默认日期格式和格式时间部分为'h:mm:ss TT Z',因此我们传递给服务器的字符串看起来像'01/22/2014 12:09:00 AM -05:00'。但我正在考虑使我们的Web服务更通用,因此它应该对传入的dateTime字符串格式宽容。
现在我正在使用BCL http://goo.gl/s9Kypx以次优方式解析DateTime字符串(用户输入)。
var tmpDateTime = new DateTimeOffset(DateTime.Now).DateTime;
if (!String.IsNullOrEmpty(dateTime))
{
try
{
// Note: Looks stupid? I need to throw away TimeZone Offset specified in dateTime string (if any).
// Funny thing is that calling DateTime.Parse(dateTime) would automatically modify DateTime for its value in a system timezone.
tmpDateTime = DateTimeOffset.Parse(dateTime).DateTime;
}
catch (Exception) { }
}
问题:
我想我应该使用
答案 0 :(得分:2)
如果您需要解析该特定模式,那么您可以执行DateTimeOffset.TryParseExact
,或使用NodaTime代码从该输入中解析:
var defaultValue = new OffsetDateTime(new LocalDateTime(2000, 1, 1, 0, 0), Offset.Zero);
var pattern = OffsetDateTimePattern.Create("MM/dd/yyyy hh:mm:ss tt o<m>", CultureInfo.InvariantCulture, defaultValue);
var result = pattern.Parse("01/22/2014 12:09:00 AM -05:00");
if (!result.Success)
{
// handle your error
}
OffsetDateTime value = result.Value;
LocalDateTime local = value.LocalDateTime;
但回到你的陈述:
但我正在考虑使我们的Web服务更通用,因此它应该对传入的dateTime字符串格式宽容。
这不是一个好主意。如果要创建 Web服务,则应该非常明确地使用您正在使用的格式。优选地,它不应该是您在此处显示的格式,而应该是ISO-8601扩展格式,例如2014-01-22T12:09:00-05:00