可能是一个超级简单的解决方案,但我显然错过了一些东西。
我有一个值为“2020/07/29 13:30:00”的字符串对象。
我如何将其解析为 DateTimeOffset 对象,并假设该解析时间的时区是“GMT 标准时间”,或者是我希望指定的任何 TimeZoneInfo?
然后,我如何获取该 DateTimeOffset,并返回其 Utc 时间,但返回到我选择的任何指定时区?
非常感谢
我有一个生成vCal和iCal文件的页面,可以将事件导入Outlook和iCal.这些邮件客户端(Outlook和iCal)将接收UTC中的日期,因为他们知道用户的偏移量并将处理正确的时间.我们编写此代码的客户端基于美国东部时区,我也是.我们的主机位于中部时区(距离东部1小时).我想让代码处理这个没有任何硬编码的偏移量.我的代码目前从我们的CMS获得DateTime并转换为UTC for Outlook/iCal.这意味着CMS的DateTime值相对于托管位置:
// Start Date Time
sb.AppendFormat("DTSTART:{0}\n", thisEvent.StartDate.ToUniversalTime().ToString("yyyyMMddTHHmmssZ"));
Run Code Online (Sandbox Code Playgroud)
当我在本地运行时,一切都很好,因为CMS中的DateTime基于我们客户端的东部时区,所以我是,所以进程是东部 - > UTC - >进入Outlook然后进入UTC - >东部一切都很好.当我在Central中部署到服务器时,来自CMS的DateTime距离Eastern一小时.如何在转换为UTC之前自动从东方获取偏移并添加它?我显然需要这个来处理标准时间(EST)和日光时间(EDT).我想以编程方式执行它而不使用硬编码值,因此无论您处于什么时区,它都能正常工作.即如果我将此代码交给某人在印度进行开发,它应该自动处理其本地服务器的偏移量和相应调整.
我需要做这样的事情,我在转换为UTC之前将偏移应用到东部时间:
sb.AppendFormat("DTSTART:{0}\n", thisEvent.StartDate.ApplyEasternOffset().ToUniversalTime().ToString("yyyyMMddTHHmmssZ"));
Run Code Online (Sandbox Code Playgroud)
很抱歉,如果这是之前讨论过的主题,我只是不确定找到这样的问题的最佳条款.提前致谢.
如果您在MSDN中查看此帮助主题:
它说:"没有服务器端夏令时(DST)支持datetimeoffset."
任何人都能解释这意味着什么吗?
我读它的方式是:说DST生效,我使用SYSDATETIMEOFFSET().结果以这种格式出现:
YYYY-MM-DD hh:mm:ss [.nnnnnnn] [{+ | - } hh:mm]
该HH值将一个小时的背后我的实际的本地时间(好像DST未生效).是对的吗?
如果我有一个表示有效UTC时间的DateTime实例,以及将该DateTime转换为适用它的时区的偏移量,我该如何构造一个DateTimeOffset实例来表示它?
var utcDateTime = new DateTime(2011, 02, 29, 12, 43, 0, /*DateTimeKind.Utc*/);
var localOffset = TimeSpan.FromHours(2.0);
var dto = ...
// Here the properties should be as follows;
// dto.UtcDateTime = 2011-02-29 12:43:00
// dto.LocalDateTime = 2011-02-29 14:43:00
Run Code Online (Sandbox Code Playgroud)
也许我没有正确理解DateTimeOffset结构,但我无法获得预期的输出.
提前致谢
我需要通过设置2个字符串参数来创建一个自3个小时之前和现在开始的时间范围:
[string] since
[string] before
Run Code Online (Sandbox Code Playgroud)
而每个参数的DateTimeOffset格式为:“ yyyy-MM-dd HH:mm:ss z:00”
如何在PowerShell中设置参数的前后值?
时间到了我正在将SQL Server中的DateTime字段迁移到DateTimeOffset的应用程序中。
想知道SQL Server中是否有任何自动化工具可以帮助我解决这个问题,因此我不需要编写一堆alter table语句的脚本?
我有一张excel表,其中有一个日期,我使用一些JavaScript或VBA(没关系).
然后我最终得到一个如下所示的日期: "Tue Feb 4 00:00:00 UTC+0100 2014"
是否有任何版本的版本将其转换为C#DateTime?如您所见,我不使用时间部分,因此也不关心UTC偏移.
我想将默认值设置为DateTimeOffset - 它不应该是DateTime.Now而是DateTime.MinValue或default(DateTime)
有什么想法我该怎么办?这段代码:
DateTimeOffset d = new DateTimeOffset(DateTime.MinValue)
Run Code Online (Sandbox Code Playgroud)
抛出一个例外
我有一个最简单的方法,将字符串解析为DateTime 但返回类型是DateTimeOffset?.
我期待输出
2011-01-11 00:00:00 +01:00
2011-10-11 00:00:00 +01:00
Run Code Online (Sandbox Code Playgroud)
但事实确实如此
2011-01-11 00:00:00 +01:00
2011-10-11 00:00:00 +02:00
Run Code Online (Sandbox Code Playgroud)
为什么我会这样做?我的测试程序如下.
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Parse("20110111").ToString());
Console.WriteLine(Parse("20111011").ToString());
Console.ReadLine();
}
public static DateTimeOffset? Parse(string date)
{
DateTime parsedDate;
if (DateTime.TryParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate))
{
return parsedDate;
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud) 我的最终目标是从客户端获得没有偏移的通用时间 - 只是UTC时间.我试着这样做:
Javascript : (new Date()).toUTCString(),输出日志:Thu, 17 Mar 2016 15:13:23 GMT,这正是我需要的.
然后我把它带到服务器并尝试将其转换为DateTimeOffset:
string dateTimeOffsetPattern = "ddd, dd MMM yyyy HH:mm:ss 'GMT'";
DateTimeOffset clientLoginTime = DateTimeOffset.ParseExact
(timeStringFromClient, dateTimeOffsetPattern, CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
结果如下:
3/17/2016 3:13:23 PM -04:00
Run Code Online (Sandbox Code Playgroud)
它以某种方式调整了我本地(东方)偏移的时间.我不希望这种情况发生,我希望它只返回UTC时间,如下所示:
3/17/2016 3:13:23 PM +00:00
Run Code Online (Sandbox Code Playgroud)
PS我刚刚问了一个关于这个的问题,我道歉,因为我觉得它应该很容易,但我不明白.这应该非常简单,但看起来offset没有setter(除非我像往常一样完全缺少一些C#基础知识):
public TimeSpan Offset { get; }
Run Code Online (Sandbox Code Playgroud) datetimeoffset ×10
c# ×6
datetime ×6
timezone ×3
.net ×1
default ×1
dst ×1
powershell ×1
sql ×1
sql-server ×1