我必须将不同数量的字符串转换为本地时区(.ToLocalTime()
),但与普通的DateTime字符串不同,这些字符串只包含日期和时间(它们应该是UTC格式),如下所示: / p>
SUNDAY:17:00
FRIDAY:16:50
MONDAY:20:50
THURSDAY:07:00
我正在寻找一种聪明的方式来转换"那些字符串到本地时区,但由于我无法得到一个DateTime,我必须手动完成,我想避免。 (我也不想拆分字符串...)
答案 0 :(得分:1)
您可以使用DateTime Constructor创建日期并将其转换为普通的DateTime,不是吗?
检查此示例,并替换为您需要的内容。
var theDate = new DateTime (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, hours, minute, second);
来自doc:
public DateTime(
int year,
int month,
int day
)
DateTime date1 = new DateTime(2010, 8, 18);
Console.WriteLine(date1.ToString());
// The example displays the following output:
// 8/18/2010 12:00:00 AM
答案 1 :(得分:1)
如果不知道具体日期,则无法正确处理TimeZoneOffset,因为偏移量可能会从一天变为另一天(DST与非DST)。
获取正确的时间是很容易的部分(如果你有正确的日期),只需使用DateTime的相应构造函数。
DateTime(int year, int month, int day, int hour, int minute, int second, System.DateTimeKind kind)
并将类型指定为System.DateTimeKind.Utc
。然后,您将时间戳作为UTC时间,然后您可以使用ToLocalTime()
在当地时区获得正确的时间。
在我看来,困难的部分是从您的数据中获取正确的日期。哪个SUNDAY意味着,下一个(即2016-07-10)或最后一个(2016-07-03)?这对于DST切换附近的日期尤其重要,因为这可能会导致不同的时间戳。
另请注意,“星期日:23:00”UTC的某些时区可能会变成“星期一:01:00”(反之亦然)!因此,您还必须根据UTC而不是当地时间计算日期。例如,如果在当地时间是星期一2016-07-04 01:00,但是这是2016-07-03 23:00 UTC,那么使用当地时间解释时间戳SUNDAY:17:00(并希望下一个时间)星期日)将导致2016-07-10 19:00而不是2016-07-03 19:00。