我将数据库中的日期/时间存储为UTC,并根据特定时区将其在我的应用程序中计算回本地时间.比方说我有以下日期/时间:
01/04/2010 00:00
比如说它是一个国家,例如英国,它遵守DST(夏令时),在这个特定的时间,我们在夏令时.当我将此日期转换为UTC并将其存储在数据库中时,它实际存储为:
31/03/2010 23:00
由于日期将调整为夏令时的-1小时.当您在提交时观察DST时,此工作正常.但是,当时钟调整回来时会发生什么?当我从数据库中提取该日期并将其转换为本地时间时,特定日期时间将被视为31/03/2009 23:00
实际上它被处理为01/04/2010 00:00
.
如果我错了,请纠正我但是在存储UTC时间时这不是一个缺陷吗?
时区转换的示例
基本上我正在做的是存储信息提交到我的系统的日期/时间,以便允许用户进行范围报告.这是我存储日期/时间的方式:
public DateTime LocalDateTime(string timeZoneId)
{
var tzi = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
return TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tzi).ToUniversalTime().ToLocalTime();
}
Run Code Online (Sandbox Code Playgroud)
存储为UTC:
var localDateTime = LocalDateTime("AUS Eastern Standard Time");
WriteToDB(localDateTime.ToUniversalTime());
Run Code Online (Sandbox Code Playgroud) 使用之间有什么区别
Mouse.OverrideCursor = Cursors.Wait
Run Code Online (Sandbox Code Playgroud)
和
this.Cursor = Cursors.Wait.
Run Code Online (Sandbox Code Playgroud)
哪一个是正确的?
因为我正在使用WPF
和C#
.
下面的代码在Delphi 7中运行正常.但是,在Delphi 2009中,表单仍然隐藏,但任务栏上的按钮现在出现了.
ShowWindow(Handle, SW_HIDE);
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW );
ShowWindow(Handle, SW_SHOW);
Run Code Online (Sandbox Code Playgroud)
上面的代码在FormCreate方法中调用.
我扩展了我的实体以实现其类型的特定接口.我正在尝试执行以下查询:
var results = from x in context.MyEntityTable
where x.AProperty == AValue
select x;
return results.Count() > 0 ? results.Cast<IApplicationEntity>().ToList() : null;
Run Code Online (Sandbox Code Playgroud)
但是,我不断收到以下错误:
"LINQ to Entities仅支持转换实体数据模型基元类型"
基本上我想要做的是始终将原始实体类型的结果转换为它实现的接口的通用列表.
这可能吗?
我需要通过控制台应用程序异步发送电子邮件.我需要在回调上做一些数据库更新,但我的应用程序在回调代码运行之前退出!
我怎样才能以一种好的方式阻止这种情况发生,而不是简单地猜测在退出前等待多长时间.我会想象异步调用会被置于某种形式的线程中吗?有可能检查是否还有等待被叫?
示例代码
private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
// Get the unique identifier for this asynchronous operation.
String token = (string) e.UserState;
if (e.Cancelled)
{
Console.WriteLine("[{0}] Send canceled.", token);
}
if (e.Error != null)
{
Console.WriteLine("[{0}] {1}", token, e.Error.ToString());
}
else
{
// update DB
Console.WriteLine("Message sent.");
}
}
public static void Main(string[] args)
{
var users = Repository.GetUsers();
SmtpClient client = new SmtpClient("Host");
client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
MailAddress from = new MailAddress("system@domain.com", "System", Encoding.UTF8); …
Run Code Online (Sandbox Code Playgroud) 根据HTTP 1.1.规格:
如果Request-URI未指向现有资源,并且该URI能够被请求用户代理定义为新资源,则源服务器可以使用该URI创建资源.
换句话说,PUT可用于创建和更新.更具体地说,如果我做一个PUT请求,例如
PUT /users/1
Run Code Online (Sandbox Code Playgroud)
并且该用户不存在,我希望此请求的结果是创建具有此ID的用户.但是,如果您的后端使用自动增量键,这将如何工作?如果它不可行(例如自动增量为6并且我请求10)并且如果可能(例如请求7)创建,那么它是否会简单地忽略它?
从我上面提到的片段看来它似乎给你这种灵活性,只是寻找一些澄清.
我有一个多窗口应用程序.我的主要形式是桌面的孩子.我的应用程序可以创建其他形式,也成为桌面的孩子.但是,我有一个特殊情况,我的主表单需要创建一个始终保持在其上的表单.
我有这个工作到一定程度....但是,如果我然后在应用程序中创建其他窗口这个表单似乎仍然在这些!
基本上我需要知道的是......
如何从我的主表单创建表单并使其仅保留在我的主表单之上?可能吗?
目前正在进行XML序列化,但速度非常慢.寻找一种从文件中快速保存/加载信息的方法并不真正对它在光盘上的外观感兴趣(如果有什么我希望它被模糊,因为我不想手动编辑).
考虑二进制格式但是我不确定它是否能够序列化可能是自定义类型的属性等.
有任何想法吗?
根据我的研究,不可能改变线程的时区.所以我的问题是你为什么不能?
我本以为将你的应用程序的文化切换到特定的国家也会切换这个,看起来像预期的行为IMO.
编辑
修改后,我可以看到它默认情况下不应该以1:1映射的原因.但是,我仍然认为能够更改每个线程的时区是一个很好的功能.
我想比较两个日期,以确认它们之间的年数是多少>= 18
.例如,如果我的2个日期是03-12-2011
,03-12-1983
然后这应该通过验证,但是,如果我的2个日期是03-12-2011
,03-12-1995
然后这将失败验证.
谁能帮我?