来自字符串的新 DateTimeOffset

New DateTimeOffset from string

我想用 offset = -5 从字符串

创建一个新的 DateTimeOffset

我愿意:

string dt = "11082016";    
DateTime date = DateTime.ParseExact(dt, "MMddyyyy", 
                                    CultureInfo.InvariantCulture, 
                                    DateTimeStyles.None);    
DateTimeOffset dto = new DateTimeOffset(date, TimeSpan.FromHours(-5));

是否可以不通过 DateTime 直接创建 DateTimeOffset

Is it possible to create directly a DateTimeOffset without passing by DateTime ?

不,那不可能。

每个 DateTimeOffset instance has to have it's DateTime part. You can't create a DateTimeOffset instance just with a UTC Offset 值。

Of course it has some constructors 不把DateTime作为参数直接 like;

  • DateTimeOffset(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, TimeSpan)
  • DateTimeOffset(Int32, Int32, Int32, Int32, Int32, Int32, Int32, TimeSpan)
  • DateTimeOffset(Int32,‖Int32,‖Int32,‖Int32,‖Int32,‖Int32,‖TimeSpan)
  • DateTimeOffset(Int64, TimeSpan)

但是那些 Int32Int64 值是 仍然 在内部为当前实例 .DateTime property 生成一个 Datetime

I want to create a new DateTimeOffset with offset = -5 from a string

如果你能做到这一点,你就不会需要那个字符串,你不觉得吗?

当然可以:

string dt = "11082016";
string o = "-5";
var dto = DateTimeOffset.ParseExact(dt + o, "MMddyyyyz", CultureInfo.InvariantCulture);

虽然不是很漂亮 - 重点是 DateTimeOffset 还有一个 ParseExact 方法。