代码说了一百万字:
php > echo strtotime("2010-12-07T23:00:00.000Z");
1291762800
echo date('c', 1291762800);
2010-12-08T00:00:00+01:00
php > var_dump(DateTime::createFromFormat('c', "2010-12-07T23:00:00.000Z"));
bool(false)
php > var_dump(DateTime::createFromFormat(DateTime::ISO8601, "2010-12-07T23:00:00.000Z"));
bool(false)
Run Code Online (Sandbox Code Playgroud)
知道发生了什么事吗?
顺便说一下,是的,新的DateTime("2010-12-07T23:00:00.000Z")运行正常.但我更愿意知道我得到了什么输入.
我遇到了一个错误,其中返回的DB结果应该是一个数组,但是由于SQL查询中的一个小故障,在一个实例中,DB包装器正确返回null.不幸的是,代码没想到(= bug).
但是,当将null值作为数组访问时,我很惊讶地看到PHP没有发出警告.有谁知道这是设计还是有一个解释我错过了?
显示我的意思的示例:
$ php -a
Interactive shell
> echo phpversion() . PHP_EOL;
5.4.26
php > echo $test['value'];
PHP Notice: Undefined variable: test in php shell code on line 1
php > $test = 'string';
php > echo $test['value'];
PHP Warning: Illegal string offset 'value' in php shell code on line 1
php > $test = null;
php > echo $test['value'];
Run Code Online (Sandbox Code Playgroud)
我希望最后一个语句能够生成警告.
我正在为Java 1.5应用程序寻找具有到期功能的并发Set。它可以用作存储/缓存在特定时间后到期的名称(即字符串值)的简单方法。
我要解决的问题是,两个线程在一定时间内不应该使用相同的名称值(因此,这是一种黑名单,可确保使用相同的“名称”,就像消息引用一样,可以直到经过一定时间后才能被另一个线程重用)。我自己无法控制名称的生成,因此我无法对强制使用唯一性的实际名称/字符串做任何事情,而应将其视为一种限制/限制机制,以防止同一名称每秒使用一次以上。
示例:线程#1这样做cache.add("unique_string, 1)将名称“ unique_string”存储1秒钟。如果任何线程通过执行例如cache.get("unique_string")1秒钟内的操作来寻找“ unique_string”,它将获得肯定的响应(项目存在),但是此后该项目应过期并从集合中删除。
容器有时会每秒处理50-100次插入/读取。
我确实一直在寻找不同的解决方案,但是没有找到我认为真正适合我需要的任何东西。感觉像是一个简单的问题,但是我发现的所有解决方案都过于复杂或过大。
一个简单的想法是将一个ConcurrentHashMap对象的键设置为“名称”,将值设置为到期时间,然后一个线程每秒运行一次,并删除其值(到期时间)已经过去的所有元素,但是我不确定这样做的效率如何。将会?我没有一个更简单的解决方案吗?