来自ISO-8601:2004(E)规范:
4.2.2.4带小数部分的表示法
如果特定应用需要,可以包括小时,分钟或秒的小数部分.如果包含小数部分,则应省略低阶时间元素(如果有),小数部分应从整数部分除以ISO 31-0中指定的小数符号,即逗号[,]或句号[ ].其中,逗号是首选标志.
很简单.因此,根据此规范,优选使用逗号分隔整个和小数部分来写入一秒的分数,例如2014-01-01T00:00:00,123.然而,似乎几乎无处不在,只接受小数点(又名"完全停止")!
现在我确定有一些语言或库将这一点考虑在内,我知道在很多情况下你可以自己提供格式的全部细节.但这似乎是对规范的明显监督,似乎各种程序员都犯了同样的错误. 除了纯粹的人为错误之外,是否存在这种情况的原因?
以下是我测试的地方列表.如果您找到其他人,请随意编辑问题以扩充我的列表.谢谢.
DateTime dt = DateTime.Parse("2014-01-01T00:00:00,123");
Run Code Online (Sandbox Code Playgroud)
抛出一条FormatException消息"字符串未被识别为有效的DateTime".使用句点而不是逗号的相同内容会成功解析.
最新(在撰写本文时)Chrome,Internet Explorer,Firefox和Node.js进行了测试:
var dt = new Date('2014-01-01T00:00:00,123');
Run Code Online (Sandbox Code Playgroud)
退货"Invalid Date".使用句号代替工作正常.
var valid = moment("2014-01-01T00:00:00,123").isValid();
Run Code Online (Sandbox Code Playgroud)
退货false.使用句点代替返回true.
echo strtotime('2014-01-01T00:00:00,123');
Run Code Online (Sandbox Code Playgroud)
返回一个空字符串.使用句号代替工作正常.
require 'time'
puts Time.iso8601("2014-01-01T00:00:00,123")
Run Code Online (Sandbox Code Playgroud)
给出了运行时错误.虽然Time不保持小数秒,但它不应该出错 - 实际上如果使用句号,它就可以工作.
作为 Sentry 和 Web 开发以及调试问题的初学者,Sentry 发现的一些错误对我来说完全令人困惑,包括这个。我们的网络应用程序在 Sentry 说有错误的 URL 上看起来很好。我不熟悉我们的应用程序使用与webkit-masked-url. 忽略这种类型的错误是否安全?
我正在将实体框架与NHibernate进行比较,我想知道在使用SQL Server时,在NHibernate上启用或禁用MARS支持会产生什么影响(如果有的话)?
MARS =多个活动结果集
该实体Framwork文件规定如下:
Load在foreach(C#)或For Each(Visual Basic)枚举期间调用方法时,实体框架会尝试打开新的数据读取器.除非通过multipleactiveresultsets=true在连接字符串中指定启用了多个活动结果集,否则此操作将失败.有关详细信息,请参阅在MSDN上使用多个活动结果集(MARS).您还可以将查询结果加载到List集合中,该集合关闭数据读取器并使您能够枚举集合以加载引用的实体.
NHibernate有同样的问题吗?
在Raven Studio UI中,当您查看文档时,您可以阅读(在页面右侧)文档的最后写入日期.
我没有通过C#中的客户端API找到此信息的任何访问权限.你知道这是否可能?
默认情况下运行Raven.Server.exe时,管理面板在IP:PORT地址处可见.如何仅限特定用户访问此面板?
我有一个ID为的实体
public string ID {get;set;}
activities/1
Run Code Online (Sandbox Code Playgroud)
(来自RavenDB).
我在ServiceStack AppHost中注册了以下路由
Routes
.Add<Activity>("/activities")
.Add<Activity("/activities/{id}");
Run Code Online (Sandbox Code Playgroud)
我正在使用骨干应用程序POST和PUT到我的REST服务.
开箱即用的事情:
我知道的选项:
两者都有缺点,我要么在我的API中丢失RESTful,这是不可取的,或者我不遵循RavenDb约定,这通常是明智的狐狸.另外,我个人喜欢使用斜杠.
所以我想知道在servicestack中是否还有其他选项我可以用来解决这个涉及较少妥协的问题?无论是Serialiser定制还是通配路由都在我脑海中......
处理DateTime用户提供的本地值时,由于夏令时转换,很可能会产生无效或模糊的时间.
在其他语言和框架中,通常有一些方法,例如isAmbiguous和isValid时区的某些表示.例如在.NET中,有TimeZoneInfo.IsAmbiguousTime和TimeZoneInfo.IsInvalidTime.
许多其他时区实现具有类似的方法或功能来解决这个问题.例如,在Python中,pytz库将抛出一个AmbiguousTimeError或InvalidTimeError异常,你可以捕获.
PHP有很好的时区支持,但我似乎找不到任何解决这个问题的方法.我能找到的最接近的东西是DateTimeZone :: getTransitions.这提供了原始数据,因此我可以看到一些方法可以在此基础上编写.但它们是否已存在于某个地方?如果没有,任何人都可以提供良好的实施吗?我希望他们的工作方式如下:
$tz = new DateTimeZone('America/New_York');
echo $tz->isValidTime(new DateTime('2013-03-10 02:00:00')); # false
echo $tz->isAmbiguousTime(new DateTime('2013-11-03 01:00:00')); # true
Run Code Online (Sandbox Code Playgroud) 在提出这个问题之前,我已经搜索了所有stackoverflow并阅读了文档,但我不能只了解如何将一个UTC日期转换为用户的本地时间并以其格式显示.我一直在尝试不同的方法,但我一次又一次地得到同样的时间.
所以我的django返回UTC中的obj.created_on作为 - 2013-12-26T13:52:24 - 没有时区信息,但我知道它的UTC
现在我希望momentjs自动检测用户的时区并在该时区进行转换.
我可以使用相同的语法吗?
我也在尝试这个:
new_date = moment(obj.created_on).utc().local().format()
Run Code Online (Sandbox Code Playgroud) 我有一个表示DateTime的结构,它也有如下区域信息:
public struct DateTimeWithZone
{
private readonly DateTime _utcDateTime;
private readonly TimeZoneInfo _timeZone;
public DateTimeWithZone(DateTime dateTime, TimeZoneInfo timeZone,
DateTimeKind kind = DateTimeKind.Utc)
{
dateTime = DateTime.SpecifyKind(dateTime, kind);
_utcDateTime = dateTime.Kind != DateTimeKind.Utc
? TimeZoneInfo.ConvertTimeToUtc(dateTime, timeZone)
: dateTime;
_timeZone = timeZone;
}
public DateTime UniversalTime { get { return _utcDateTime; } }
public TimeZoneInfo TimeZone { get { return _timeZone; } }
public DateTime LocalTime
{
get
{
return TimeZoneInfo.ConvertTime(_utcDateTime, _timeZone);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用以下方法序列化对象:
var now = DateTime.Now;
var dateTimeWithZone …Run Code Online (Sandbox Code Playgroud) 我正在尝试根据用户偏好超时电子邮件.我早上的计算工作正常但是晚上的电子邮件永远不会被发送,因为日期不符合预期.
首先,这是我用来抓取时间并根据用户位置等进行调整的代码.
var time = moment();
var machineTZ = time.zone();
var userTZ = 420;
var diffTZ = userTZ - machineTZ;
var oneHour = moment(time).add('minutes', 60);
var morningRun = moment().startOf('day');
morningRun.hour(7).minute(0);
morningRun.add('minutes', diffTZ);
var eveningRun = moment().startOf('day');
eveningRun.hour(19).minute(30);
eveningRun.add('minutes', diffTZ);
Run Code Online (Sandbox Code Playgroud)
我正在检查每个小时,看看是否该安排另一封电子邮件出去.现在这是硬编码的,但是当我开始添加用户偏好时,他们将能够选择他们喜欢的东西当地时间.
我一直在调试我的值以进行故障排除.这是清晨运行的作业的输出(从服务器的角度来看):
lastRun: 2013-10-12T00:06:55.088Z (this one is being run at 1 am)
morningRun: 2013-10-11T14:00:00.000Z
eveningRun: 2013-10-12T02:30:00.000Z
Run Code Online (Sandbox Code Playgroud)
运行数字正如我所期望的那样.在两个小时的时间里,我想要晚上的电子邮件出去(我的时间晚上7:30 =第二天服务器时间凌晨2:30).
一小时后再看,我们看到:
lastRun: 2013-10-12T01:06:58.267Z (this one is at 2 am)
morningRun: 2013-10-12T14:00:00.000Z
eveningRun: 2013-10-13T02:30:00.000Z <---- what?
Run Code Online (Sandbox Code Playgroud)
突然之间,我对晚上的计算已经超过日期线,即使它仍然是10/12(还不是10/13).因此,我检查是否应安排电子邮件失败,因为它现在认为我需要在24小时内发送电子邮件,而不是30分钟.
一段时间以来一直在与这种奇怪的不一致作斗争,我以为我已经弄清楚它为什么这样做并使用上面的时区调整我的计算但是没有做到这一点:(.这当然看起来有些奇怪我希望这会发生错误:
//Today is 10/12
var eveningRun = …Run Code Online (Sandbox Code Playgroud) javascript ×4
datetime ×3
ravendb ×3
c# ×2
momentjs ×2
php ×2
timezone ×2
dst ×1
iso8601 ×1
json.net ×1
nhibernate ×1
node.js ×1
rest ×1
safari ×1
sentry ×1
servicestack ×1
sql-server ×1