我想计算美国/中部时区和英国夏令时之间的当前时差.我的意思是,目前这两个时区都有夏令时,所以他们有6小时的时差.但是在2010年10月31日星期日之后,英国夏季的夏令时将会被取消,届时这两个时区之间将有5小时的时差.
有什么方法可以计算出这些不同的时差吗?
我正在使用JSON.NET在C#中解析一些JSON.JSON中的一个字段是日期/时间,如下所示:
{
"theTime":"2014-11-20T07:15:11-0500",
// ... a lot more fields ...
}
Run Code Online (Sandbox Code Playgroud)
请注意,时间部分是07:15:11(GMT-5小时TZ)
我从这样的流解析JSON:
using (var streamReader = new StreamReader(rcvdStream))
{
JsonTextReader reader = new JsonTextReader(streamReader);
JsonSerializer serializer = new JsonSerializer();
JObject data = serializer.Deserialize<JObject>(reader);
//...
}
Run Code Online (Sandbox Code Playgroud)
然后访问时间:
DateTime theTime = (DateTime)data["theTime"];
Run Code Online (Sandbox Code Playgroud)
但是,这给了我这个DateTime对象:
{20/11/2014 12:15:11}
Date: {20/11/2014 00:00:00}
Day: 20
DayOfWeek: Thursday
DayOfYear: 324
Hour: 12
Kind: Local
Millisecond: 0
Minute: 15
Month: 11
Second: 11
Ticks: 635520825110000000
TimeOfDay: {12:15:11}
Year: 2014
Run Code Online (Sandbox Code Playgroud)
我需要知道原始的本地时间和tz偏移量,但我似乎在反序列化过程中丢失了这些信息,它给了我时间,我认为是我当地的时间(我在英国,所以目前在GMT + 0).
在反序列化时,我有办法保留时区信息吗?
编辑:添加了有关我如何反序列化的更多细节.
我正在使用Jon Skeet 在c#fx 3.5中的特定时区创建日期时发布的DateTimeWithZone结构
这不适用于我的情况,因为它假定在构造函数中传递的DateTime是本地时间,因此使用指定的TimeZone将其转换为Utc.
在我的情况下,我们将主要传递已经在Utc中的DateTime对象(因为这是我们正在存储的),所以我们只需要在源DateTime.Kind不是Utc时执行转换.
因此我将构造函数更改为:
public DateTimeWithZone(DateTime dateTime, TimeZoneInfo timeZone, DateTimeKind kind = DateTimeKind.Utc) {
dateTime = DateTime.SpecifyKind(dateTime, kind);
utcDateTime = TimeZoneInfo.ConvertTimeToUtc(dateTime, timeZone);
this.timeZone = timeZone;
}
Run Code Online (Sandbox Code Playgroud)
这里我们有一个可选的Kind参数,默认为Utc.
但是,运行此代码并传递Utc DateTime会生成以下异常:
转换无法完成,因为提供的DateTime没有正确设置Kind属性.例如,当Kind属性为DateTimeKind.Local时,源时区必须为TimeZoneInfo.Local.
根据文档(http://msdn.microsoft.com/en-us/library/bb495915.aspx):
如果dateTime参数的Kind属性等于DateTimeKind.Utc且sourceTimeZone参数等于TimeZoneInfo.Utc,则此方法返回dateTime而不执行任何转换.
由于输入时间和时区都具有Utc的Kind属性,因此我不希望得到此异常.
我误解了吗?
在 .Net Core 2 中 -
有没有办法全局设置应用程序的时区,以便每当我请求时,DateTime.Now我都会获得我想要的时区的当前时间(比如 GMT+3),而不是托管应用程序的服务器的时间?
我认为有一个配置的好地方是 Startup.cs 文件,但我的搜索查询让我无处可去。
我有不同的时区和他们的GMT和DST.例:
TimeZoneId | GMT offset | DST offset
| 1. Jan 2010 | 1. Jul 2010
--------------------------------------------------
America/Adak | -10.0 | -9.0
America/Anchorage | -9.0 | -8.0
America/Anguilla | -4.0 | -4.0
America/Antigua | -4.0 | -4.0
America/Araguaina | -3.0 | -3.0
Run Code Online (Sandbox Code Playgroud)
这个时区由Geoname提供.
如何计算C#/ .NET中已知GMT和DST的任何时区的当前时间?
更新:为了更好地指定,我提供"America/Antigua",我需要当前时间在"America/Antigua".
我在解析日期和时间时遇到了一个问题:
我正在尝试解析从德国网站提取的日期时间字符串.它的格式为'day.month.year 24hours:minutes',如:
01.01.2011 17:00
Run Code Online (Sandbox Code Playgroud)
它总是在德国时区.但问题出现了:
我不知道如何实现这一目标.如果我将本地时钟设置为德国时区,并使用DateTime.ParseExact和解析标志DateTimeStyles.AssumeLocal并DateTimeStyles.AdjustToUniversal正确解析它.但是,我希望任何客户端独立于本地时钟和时区解析它.另外,我不想自己做时区偏移,因为它取决于日期(夏天:-2 /冬季:-1).
一旦我有UTC的日期时间,很容易将其转换为任何本地时区.
我有一个asp.net应用程序,必须每天在东部时区(DST感知)的特定时间运行一些代码.所以我的第一个想法是,获取东部时间值并将其转换为本地服务器时间.
所以我需要这样的东西:
var eastern = DateTime.Today.AddHours(17); // run at 5pm eastern
var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var utc = TimeZoneInfo.ConvertTimeToUtc(eastern, timeZoneInfo);
var local = TimeZoneInfo.ConvertTimeFromUtc(utc, TimeZoneInfo.Local);
Run Code Online (Sandbox Code Playgroud)
但是如何指定东部DateTime对象应该在EST时区中.
我是以错误的方式接近这个吗?
我得到了一个 wsdl,我必须按照它的规范创建一个 web 服务;我正在使用 Visual Studio 2010。其中还有这种复杂类型的定义:
<xsd:complexType name="Person">
<xsd:sequence>
<xsd:element name="surname" type="xsd:string"/>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="birthDate" nillable="true" type="xsd:dateTime"/>
</xsd:sequence>
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)
使用 VS 我得到了以下 cs(我不记得我是怎么做的,但我遵循了网上的说明):
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://XXX/Submitter/")]
public partial class Person {
private string surnameField;
private string nameField;
private System.Nullable<System.DateTime> birthDateField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string surname {
get {
return this.surnameField;
}
set {
this.surnameField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public string name {
get {
return this.nameField;
}
set …Run Code Online (Sandbox Code Playgroud) 我想要DateTime以下格式.
DateTime a = Convert.ToDateTime(DateTime.UtcNow.ToString("s") + "Z");
Run Code Online (Sandbox Code Playgroud)
输出:
2018-05-29T09:16:59Z
Run Code Online (Sandbox Code Playgroud)
我想要subtract从这个时间开始4个小时.所以我使用了这行代码:
var result = a.AddHours(-4);
Run Code Online (Sandbox Code Playgroud)
现在,不仅显示错误的时间,上述格式也受到干扰.
29-05-2018 10:52:51
Run Code Online (Sandbox Code Playgroud)
预期产出:
2018-05-29T05:16:59Z
Run Code Online (Sandbox Code Playgroud) 如何获取另一个UTC位置的时间,或者至少在计算机中设置的UTC时间值,以便我可以增加/减少当前时间并获得我想要的内容?
我的具体问题是:
我在一个特定的位置,我想知道在英国几点钟.
我有一个很大的问题,我不知道如何解决它
我创建了一个Web应用程序并将其托管在USA服务器以及从埃及访问此Web应用程序的用户
我在应用程序中使用DateTime.Now方法的问题和这个方法返回美国服务器的时间而不是在埃及使用它的机器的时间
我怎么解决这个问题 ?请尽快帮助我
提前致谢
我正在研究一个项目,该项目有很多时间根据这些时间表安排和执行任务.
我只是想知道是否有一种更简单的方法来测试我的应用程序在我的服务器的不同时区,当他们在我的电脑上运行时.
我不想更改区域设置中的时区,而是更改某个应用程序的上下文.
数据库将所有内容存储为UTC,但应用程序会在本地时间向用户显示此内容.但是我在UTC时区对我来说是一样的.
c# ×12
datetime ×8
timezone ×6
.net ×3
asp.net ×2
.net-core ×1
asp.net-core ×1
date ×1
hosting ×1
json.net ×1
parsing ×1
soap ×1
web-hosting ×1
web-services ×1
wsdl ×1