我想用joda来解析电子邮件中的日期时间字符串.不幸的是,我得到了各种不同的格式,例如
Wed, 19 Jan 2011 12:52:31 -0600
Wed, 19 Jan 2011 10:15:34 -0800 (PST)
Wed, 19 Jan 2011 20:03:48 +0000 (UTC)
Wed, 19 Jan 2011 17:02:08 -0600 (CST)
Fri, 21 Jan 2011 10:39:55 +0100 (CET)
Fri, 21 Jan 2011 17:50:42 -0500 (EST)
Wed, 06 Apr 2011 15:38:25 GMT
Thu, 7 Apr 2011 11:38:24 +0200
Fri, 8 Apr 2011 05:13:36 -0700 (MST)
20 Apr 2011 03:00:46 -0400
Run Code Online (Sandbox Code Playgroud)
下面的代码捕获了大多数变体但不是全部(例如,当有两个空格而不是一个时,逗号丢失等).它看起来很尴尬.
有更优雅的方式来处理这个问题吗?请指教.
DateTimeParser[] parsers = {
DateTimeFormat.forPattern("E, d MMM y HH:mm:ss Z").getParser(),
DateTimeFormat.forPattern("E, d …Run Code Online (Sandbox Code Playgroud) 我想在主分支上重新绑定一个分支,但是这样一来,所有提交都会在git日志中按时间顺序显示.这可能没有git rebase --interactive并手动重新安排提交吗?
背景:我使用git来跟踪服务器场的puppet配置.主分支始终处于已知良好状态,因此所有现有服务器都可以从puppet主服务器检索其配置.
每个新服务器都有自己的分支,因此每当我处理新服务器的配置时,例如更改域名,配置SSL证书,我都会检查其分支并提交所有配置.
新配置完成后,我将更改重新绑定到主分支:
# git checkout new_config
Switched to branch 'new_config'
# git rebase master
First, rewinding head to replay your work on top of it...
Applying: fix routing rules
Applying: fix netmask
Applying: configure new ip address
# git checkout master
Switched to branch 'master'
# git merge new_config
Updating 21a3120..b0b79d7
Fast-forward
files/custom/xxxx | 45 +++++++++++++++++++++++++++++++++++++++++++++
files/custom/yyyy | 38 --------------------------------------
manifests/site.pp | 6 +++---
3 files changed, 48 insertions(+), 41 deletions(-)
#
Run Code Online (Sandbox Code Playgroud)
新提交现在位于日志之上,但它们具有原始(过去)日期.它看起来像这样:
commit …Run Code Online (Sandbox Code Playgroud) 我需要经常访问耗时计算的结果.结果不经常更改,因此我不得不不时重新计算数据,但可以暂时使用过时的结果.最简单的方法是什么?现有的库方法或设计模式是什么?
我在想类似的东西
private static List myCachedList = null;
...
// refresh list once in 3600 seconds
if (needsRefresh(myCachedList, 3600)) {
// run the calculation
myCachedList = ...
}
// use either updated or previous value from here on
Run Code Online (Sandbox Code Playgroud)
一个正确的实现可能不是微不足道的,它可能必须处理线程安全,竞争条件等,所以我宁愿使用一个经过验证的实现,而不是在我自己.
我想在我的下一个项目中使用junit测试,但我不确定我应该使用哪几个模拟软件包.我还阅读了几个教程,但我没有找到如何解决下面列出的具体问题的信息.也许我检查过的软件包中没有该功能.
这就是问题所在:我想编写一个电子邮件过滤器类,它List<javax.mail.Message>按主题,日期,从,等来过滤和过滤电子邮件.要测试的代码如下所示:
public List<Message> doFilter(List<Message> messageList) {
List<Message> newList = new ArrayList<Message>(messageList.size());
try {
for (Message message: messageList) {
if (start != null) {
Date sentDate = message.getSentDate();
if (sentDate == null || sentDate.before(start))
continue;
}
if (end != null) {
Date receivedDate = message.getReceivedDate();
if (receivedDate == null || receivedDate.after(end))
continue;
}
newList.add(message);
}
}
catch(Exception e) {
e.printStackTrace();
}
return newList;
}
Run Code Online (Sandbox Code Playgroud)
所以明显的测试用例是List用一些消息构造一个并检查过滤器返回的新列表是否包含正确的消息.
但它javax.mail.Message是抽象的,不能直接实例化.我需要建立一个真正的电子邮件商店来做到这一点,包括帐户名和密码.
所以我的问题是:
如何javax.mail.Message使用不同的值模拟一些对象,以便我的过滤器类可以调用message.getSentDate()和其他Message方法,检索我在测试设置代码中定义的值? …
我想使用 pandas.read_csv 导入一个文本文件:
1541783101 8901951488 file.log 12345 123456
1541783401 21872967680 other file.log 23456 123
1541783701 3 third file.log 23456 123
Run Code Online (Sandbox Code Playgroud)
这里的难点在于各列之间由一个或多个空格分隔,但有一列包含包含空格的文件名。所以我不能sep=r"\s+"用来识别列,因为这会在第一个有空格的文件名处失败。文件格式没有固定的列宽。
但是,每个文件名都以“.log”结尾。我可以编写与每一列匹配的单独正则表达式。是否可以使用这些来识别要导入的列?或者是否可以编写一个分隔符正则表达式来选择所有不匹配任何匹配正则表达式的列的字符?
我有一个非常简单的表:
create table mydata (id integer, data character varying(255), a integer, b integer);
insert into mydata values
(1, 'both a and b not found', null, null),
(2, 'a=not found, b=20', null, 20),
(3, 'a=10, b=not found', 10, null),
(4, 'a=10, b=20', 10, 20),
(... more rows with unique combinations of a and b);
Run Code Online (Sandbox Code Playgroud)
我需要一个查询,对于 a 和 b 的任何值都只返回一行。
如果找到 a 和 b 的值,则应选择指定的行(在本例中为 id=4)。
如果未找到这些值,但有一行与 a 的值匹配并且在 b 列中为空,则该行应定义此特定 a 和未知 b 的默认值。同样,如果找到 b 但没有找到 a 并且存在具有 b 值且 a …
java ×3
caching ×1
datetime ×1
ehcache ×1
git ×1
git-rebase ×1
jakarta-mail ×1
jodatime ×1
memcached ×1
mocking ×1
pandas ×1
postgresql ×1
python ×1
sql ×1
unit-testing ×1