考虑到根据规范,应该在位于意大利的服务器上运行并且客户只是意大利人,我设计了我的应用程序.
大约一个月前,我的老板决定将其全部用于Azure.
一切顺利.唯一能给我带来一些问题的是时间服务器是UTC.
解决方案是:
一个简单的
将启动脚本修改为服务器时间( http://netindonesia.net/blogs/wely/archive/2011/06/26/setting-timezone-in-windows-azure.aspx )
B)比较费力
更改以使任何应用程序使用UTC并显示正确转换为本地时间的时间.
如果我选择解决方案A,我怀疑服务器设置了不同时区的事实可能会以某种方式与Azure产生冲突.
这是真的?
我使用EF(EDMX模型 - 数据库优先)将"TIMESTAMP WITH TIME ZONE"映射到DateTimeOffset.当我将DateTimeOffset提交给Oracle时,区域部分保存不正确.
因此,如果使用模型,例如,插入值29/02/2012 10:10:10 +04:00,实际存储在Oracle中的值是29/02/2012 10:10:10 +02:00(假设+02:00是本地区域)请注意,查询数据时映射的工作正常.只有INSERT(通过ObjectContext.SaveChanges())被破坏了......
我调试了"Oracle.DataAccess.dll"(使用ILSpy :))并发现EF的映射代码省略了区域("Oracle Data Provider"仅传递DateTimeOffset.DateTime).
有没有人知道解决方法?
在此先感谢Eli
BTW:我使用的是.net4,EF4,Oracle 11g,ODAC 11.2第4版(11.2.0.3.0)
我的应用程序需要收集全球所有地点的"星期二"购买,其中"Tueday"是该地点的星期二(不论时区).如果用户需要在下周重新运行报告,我还需要获得"上周二"的数据.我们所有的数据都使用DateTimeOffset存储.
所以9/4/12 00:00:00 -7到9/4/12 23:59:59 -7必须在9月4日12:00 00:00:00 +11到9/4/12 23:59:当我执行WHERE子句时59 +11.
我无法在WHERE子句中转换为UTC,因为这将获取伦敦"星期二"的数据(取决于DST),而不是位置的星期二.
我尝试从DateTimeOffset转换为DateTime,但似乎转换为UTC.(在我的测试中,通过9/1/12至9/30/12获取了8/31/12数据.)
用TSQL做这样的事情有诀窍吗?
谢谢!
我有一个DateTimeOffSet类型的变量.我想过滤2010年1月1日之后创建的所有项目.
所以我写了以下查询:
var _date = new DateTimeOffset(2010, 01, 01, 0, 0, 0, new TimeSpan(-7, 0, 0));
var projects = _repository.Find<Project>
(x => x.CompanyId = CompId && x.CreatedOn > _date)
.ToList();
Run Code Online (Sandbox Code Playgroud)
但是当我查看数据库时,这些是我看到的值的类型:
2001-01-25 05:21:46.4370000 -08:00
2005-06-17 00:00:00.0000000 -07:00
Run Code Online (Sandbox Code Playgroud)
显然,一些值为-08:00,其他值为-07:00.那么我的上述查询仍然相关吗?当我查看结果时,过滤正在按照我期望的方式完成.唯一值得关注的是偏移部分的含义,结果可能是偶然的.
我对DayeTimeOffSet的工作方式并不熟悉.
我在DateTimeOffset使用实体框架从 PostgreSQL 数据库检索 a 时遇到问题。就研究问题而言,我发现这篇文章可以帮助我了解问题所在,但我无法弄清楚如何解决它。
我有一个允许用户上传文件(主要是图像)的 API,它提取图像的拍摄日期并将其存储在数据库中。它在大多数情况下都很好用。但是,如果日期在 2007 年之前的 3 月 11 日到 4 月的某个时间(日期因年份而异),它会很好地保存到数据库中,但是在尝试检索该行时,它会抛出错误:
本地 dateTime 参数的 UTC 偏移量与偏移参数不匹配。
我Timestamp With Time Zone在 postgreSQL 中使用该CameraDate字段的类型。我不知道如何让它正常工作。如果有一种方法可以在不更改数据库的情况下做到这一点,那将是可取的。
例子:
2001-04-01 10:47:17-06 Works
2001-03-01 10:47:17-06 Works
2001-03-13 10:47:17-06 Doesn't work
2007-03-13 10:47:17-06 Works
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
Context.Files.Add(file);
Context.Entry(file).Reload();
Run Code Online (Sandbox Code Playgroud)
文件类如下所示(为简洁起见,删除了一些字段):
public class File
{
[Column("FileId")]
public override Guid ID { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int DisplayId { get; set; }
public DateTimeOffset? CameraDate { get; set; } …Run Code Online (Sandbox Code Playgroud) 我在数据库中有一个日期时间,我使用SqlDataReader读取然后将其转换为(DateTime).演员之后的Kind财产是DateTimeKind.Unspecified.
然后我有另一个字符串,我从其他来源读取.它的格式是这样的2016-01-20T22:20:29.055Z.我这样做DateTime.Parse("2016-01-20T22:20:29.055Z"),它的Kind属性是DateTimeKind.Local.
如何正确解析两个日期时间以进行比较?我需要使用DateTimeOffsets吗?我该如何解析它们?
谢谢
在WinRT(Windows 8.1 Store App)项目中,我使用SQLite.Net-PCL和SQLiteNetExtensions NuGet包将数据存储在本地SQLite数据库文件中.
我的几个数据模型(也称为表)包含类型的属性DateTimeOffset.目的是在不丢失偏移信息的情况下存储这些信息.(原因是用户可以在指定日期/时间时输入时区信息,并且此信息必须存储在数据库中.)
我知道storeDateTimeAsTicks在创建时可以设置的参数,将其设置SQLiteConnection为false强制所有DateTime属性都以ISO格式存储为文本 - 但是,这对DateTimeOffset属性没有影响,因为它们总是自动转换为UTC并存储为代表刻度的数字.
我可以想到以下4种方法:
DateTimeOffset为string属性并存储这些,或DateTime和偏移(作为TimeSpan日期类型)的部分DateTimeOffset,并将它们存储在两个单独的列中,=>但对于这两种方法,我需要向数据模型添加其他属性,DateTimeOffset使用[Ignore]属性标记原始属性,并处理手动转换(在两个方向上) - 因为我需要将其应用于大量不同的数据模型类,似乎太难维护.
DateTime和TimeSpan(偏移)部分DateTimeOffset,并维护对此单独表的引用=>但在这种情况下我需要定义一个自定义数据类型(为了指定应该如何存储DateTime和TimeSpan部分),并且不能使用默认的.NET DateTimeOffset类型
TextBlob属性以某种方式将序列化为DateTimeOffset单个文本列=>但这感觉有点hacky,我需要确保只有SQLiteNetExtensions的扩展方法用于数据库插入/更新,我仍然需要string在所有数据模型类上有一个额外的属性...
所以,我的问题是:我是否缺少一个更为直接,明显的解决方案?
我必须计算出发机场和到达机场之间的总飞行时间.
这项工作由以下代码片段完成:
public int calculateFlightDuration(String departureDateTime, String depAirportCode, String arrivalDateTime,
String arrAirportCode) {
try {
LocalDateTime depLocalTime = LocalDateTime.parse(departureDateTime, formatter);
LocalDateTime arrLocalTime = LocalDateTime.parse(arrivalDateTime, formatter);
ZoneOffset depZoneOffset = getTimeZoneOffset(depAirportCode);
ZoneOffset arrZoneOffset = getTimeZoneOffset(arrAirportCode);
if (depZoneOffset != null && arrZoneOffset != null) {
OffsetDateTime offsetDepTime = OffsetDateTime.of(depLocalTime, depZoneOffset);
OffsetDateTime offsetArrTime = OffsetDateTime.of(arrLocalTime, arrZoneOffset);
Duration flightDuration = Duration.between(offsetArrTime, offsetDepTime).abs();
return (int) flightDuration.toMinutes();
}
} catch (Exception e) {
LOG.warn("::calculateFlightDuration depTime:{} dep.code:{} arrTime:{} arr.code:{}", departureDateTime,
depAirportCode, arrivalDateTime, arrAirportCode);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是问题所在: …
我有一个SQL 2008表,其中一个名为RecDate的字段为DateTimeOffset.
对于给定记录,值为'2010-04-01 17:19:23.62 -05:00'
在C#中,我创建一个DataTable并用"SELECT RecDate FROM MyTable"的结果填充它.
我需要获得毫秒,但如果我执行以下操作,则毫秒始终为0:
DateTimeOffset dto = DateTimeOffset.Parse(dt.Rows[0][0].ToString());
Run Code Online (Sandbox Code Playgroud)
将RecDate列中的值放入dto变量的正确方法是什么?
我想知道是否有办法在给定的持续时间内获得两个时区之间给定日期范围的时区偏移量.
getTimezoneOffset(startDate,endDate,timezone1,timezone2){
...missing magic to go here...
}
Run Code Online (Sandbox Code Playgroud)
应该返回对给定持续时间有效的时区偏移量.但是,如果偏移量发生变化,则应返回其有效的日期范围.
所以我看的是这样的:
getTimezoneOFfset("march 9 12 am", "march 15 12 am", "UTC", "US/NEW_YORK")
Run Code Online (Sandbox Code Playgroud)
返回值这样的东西
timezoneoffset[0]["range"]=[march 9 12am to march 11 2 am]
timezoneoffset[0]["offset"]=5
timezoneoffset[1]["range"]=[march 9 2 am to march 15 12 am]
timezoneoffset[1]["offset"]=4
Run Code Online (Sandbox Code Playgroud)
我只是不想为给定范围的每个计划项目计算时区偏移量.正在寻找是否有某种方法可以直接查找偏移量,如果它会发生变化的话.
我正在使用PHP,但任何语言的解决方案都将受到赞赏.
MySQL解决方案也将工作,因为它将在MySQL中进行更优化.