小编Tau*_*ren的帖子

根据用户的本地时区在特定时间执行日常操作

我的Java应用程序需要每天向所有用户发送一次电子邮件.我想在大约凌晨2点根据每个用户的当地时间提供.因此,纽约的用户将在2AM America/New_York时间收到消息.洛杉矶的用户将在2AM America/Los_Angeles时间收到消息.我的邮件流程每天都会运行一次.

我计划使用HTML5地理位置功能或IP地址定位来在注册期间自动确定每个用户的时区.当然,如果这些值不正确,用户可以手动修改时区.我打算将选定的时区存储在User对象中作为时区ID字符串,例如"America/New_York".这将作为字符串持久保存到数据库,但如有必要,可以更改.

需要考虑的事项:

  • 我需要考虑夏令时,因此用户总是在凌晨2点左右收到电子邮件.这意味着我不能只在用户对象中存储GMT-8或类似的UTC偏移量.洛杉矶的部分时间是GMT-7,其他部分则是GMT-8.
  • 另一个SO问题的答案建议存储偏移信息,但我不知道这将如何工作,因为不同地方的时间可能会在一年中发生变化.每当世界某处发生时区变更事件时,我都不会更新所有用户对象的时区.
  • 我在我的应用程序中使用JodaTime,所以如果它有用,我可以利用它.
  • 我正在使用Hibernate进行数据库查询,并希望找到一个可以在hibernate查询中处理的解决方案,而无需在Java中处理数十万个用户记录.

我正在使用Spring Scheduling cron功能(通过Quartz)在当天每小时2分钟运行一个方法.现在我的大多数用户都在America/Los_Angeles,所以我手动强制所有邮件都在太平洋时间凌晨2:02发送.以下方法每小时运行一次:02小时,但它会手动检查时间,并且仅在洛杉矶当前时间为2:00小时时才会进行.这意味着其他地方的用户将在凌晨2点以外的时间收到电子邮件.

@Scheduled(cron="0 2 * * * *")
public void sendDailyReportEmail()  {
    DateTime now = new DateTime(DateTimeZone.forID("America/Los_Angeles"));
    if (now.getHourOfDay() != 2) {
        log.info("Not 2AM pacific, so skipping email reports");
        return;
    }
    // send email reports
}
Run Code Online (Sandbox Code Playgroud)

因此,我需要的是执行一个数据库查询,该查询将根据用户对象中的时区为我提供在凌晨2:00时有本地时间的所有用户.有关如何实现这一点的任何想法?

java timezone datetime hibernate jodatime

5
推荐指数
1
解决办法
2166
查看次数

在Spring配置文件中访问maven项目版本

我想在页面中显示我当前运行的Web应用程序版本.该项目基于Maven,Spring和Wicket.

我想以某种方式获取maven的值${project.version}并在我的spring XML文件中使用它,类似于我使用Spring PropertyPlaceholderConfigurer读取属性文件以获取我在我的应用程序中使用的设置的方式.

如果我project.version在我的Spring配置中将maven 作为变量提供,我可以这样做:

<bean id="applicationBean" class="com.mysite.web.WicketApplication">
<property name="version"><value>${project.version}</value></property>
</bean>
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

java spring maven-2 wicket maven

5
推荐指数
2
解决办法
1万
查看次数

使用特征检测而不是用户代理测试来测试IE6

我正在使用html5boilerplate和Modernizr库.我的应用程序是使用jQuery构建的.Modernizr和jQuery都内置了特征检测,但我的理解是Modernizr更完整.我打算使用Modernizr进行特征检测,除非有充分的理由为此使用jQuery.

我的应用程序仅适用于更现代的浏览器(例如IE7 +,Firefox,Chrome,Safari和更新的Opera),但它在IE6中仍然有效.我想确保用户在使用旧版浏览器(如IE6)时会看到一个很大的警告.如果他们还没有使用Chrome浏览器或其他HTML5兼容浏览器,我还想显示"建议".

我不想使用用户代理测试.

  • 是否有一个特定的功能列表,我应该测试,以确定用户是否使用IE6?
  • 是否有特定的功能列表,我应该测试以确定用户是否使用相当合规的HTML5浏览器(Chrome,Safari,IE9等)进行浏览

javascript jquery html5 feature-detection modernizr

4
推荐指数
1
解决办法
2278
查看次数

用于代码注释的Github API

我无法确定GitHub的API是否提供对用户评论的访问权限.我希望能够通过RESTful API 获取有关提交的注释以及每行注释.我还希望能够通过API添加评论和内嵌评论.

我在API中遗漏了什么,或者这是不可能的?

git api rest github

4
推荐指数
1
解决办法
917
查看次数

库清理和简化文件名?

我想转换包含空格和符号的文件名,只包含字符AZ,az,句点,连字符和下划线.像这样的正则表达式:([a-z][A-Z]-_\.)+

当然,我可以用正则表达式做到这一点.但是因为我已经在我的项目中包含了许多库(Spring,Hibernate,Apache Commons等等),所以我想知道这样的东西是否已经可用.

所以像这样的字符串:

This>is some(string,with $invalid*-chars).jpg
Run Code Online (Sandbox Code Playgroud)

将转换为:

This_is_some_string_with__invalid_-chars_.jpg
Run Code Online (Sandbox Code Playgroud)

java string spring hibernate apache-commons

4
推荐指数
1
解决办法
3335
查看次数

坚持一周的一天

我正在寻找一种有效的方法来坚持一周的日子.换句话说,用户将从工作日列表中选择任意天数.具体日期无关紧要,只是一周中的某一天.我需要将这一天存储在一个休眠实体中.

我可以存储其中一个:

Set<DayOfWeek>
Set<Integer>
Run Code Online (Sandbox Code Playgroud)

但我认为它可能比这更简单.如果我只使用单个int来存储数据并使用按位运算,该怎么办?例如:

Sun = 1
Mon = 2
Tue = 4
Wed = 8
Thu = 16
Fri = 32
Sat = 64
Run Code Online (Sandbox Code Playgroud)

因此,为了表示太阳,周一,周三,周六的集合,我将保持整数75.这是因为1 + 2 + 8 + 64 = 75.

我担心的是对这样的字段执行查询.我能找到所有选择了Wed的实体吗?

这看起来像是一个好方法吗?有没有人有更好的主意?

谢谢!

java hibernate bit-manipulation

3
推荐指数
1
解决办法
3570
查看次数

具有加权概率的Javascript随机数

我正在尝试使用以下签名创建一个函数:

function weightedRandom (target, probability) {
  // calculate weighted random number that is more likely to be near target value
  return value; // number from 0 to 1
}
Run Code Online (Sandbox Code Playgroud)

它应该做到以下几点:

  • 生成从0到1的随机数,但不包括1
  • 在该范围内挑选任何给定数字的概率不均匀分布
  • 挑选的数字接近目标值的可能性更大(目标也是从0到1的值)
  • 概率曲线看起来像钟形曲线,其中目标值具有最高概率并且其周围的值逐渐减小,但是0到1范围内的所有值仍然有可能被挑选.
  • 可以使用概率值调整此机会的权重,其中值0表示不对随机性应用加权,1表示几乎所有拾取的数字将在目标值周围聚集.

例如,weightedRandom(0.8, 0.2)会导致20%的随机值可能聚集在值0.8附近,但可能是从0到1的任何数字.如果概率为0.5,那么返回的结果随机值将会更多接近0.8.我想可能还需要另一个参数来定义簇的宽度(标准偏差?).

我不是数学家,但我被告知要将Beta发行版作为一种可能的工具来帮助:

在此输入图像描述

我发现了一些具有beta功能的NPM模块,但我不知道如何使用它们来解决这个问题:

javascript random math node.js

3
推荐指数
1
解决办法
2813
查看次数

鼠标悬停在绝对定位div上触发

目的

当表格单元格悬停在表格单元格的右上角时,会出现一个小的放大镜图标.将鼠标放在放大镜图标上并单击它将打开一个对话框窗口,以显示有关该特定表格单元格中项目的详细信息.我想为数百个表格单元重用相同的图标,而不是每次都重新创建它.

部分解决方案

有一个<span>绝对定位和隐藏的单一.当_previewable表格单元格悬停时,<span>会移动到正确的位置并显示.这<span>也在DOM中移动为_previewable表格单元格的子节点.这使得附加到其<span>上的单击处理程序能够找到_previewable父项,并从其用于填充对话框内容的jquery data()对象中获取信息.

这是我的HTML的一个非常简化的版本:

<body>
    <span id="options">
        <a class="ui-state-default ui-corner-all">
            <span class="ui-icon ui-icon-search"></span>
            Preview
        </a>
    </span>
    <table>
         <tr>
             <td class="_previewable">
                 <img scr="user_1.png"/>
                 <span>Bob Smith</span>
             </td>
        </tr>
   </table>
</body>
Run Code Online (Sandbox Code Playgroud)

这个CSS:

#options {
    position: absolute;
    display: none;
}
Run Code Online (Sandbox Code Playgroud)

有了这个jQuery代码:

var $options = $('#options');
$options.click(function() {
    $item = $(this).parents("._previewable");
    // Show popup based on data in $item.data("id");
    Layout.renderPopup($item.data("id"),$item.data("popup"));               
});

$('._previewable').live('mouseover mouseout',function(event) {
    if (event.type == 'mouseover') { …
Run Code Online (Sandbox Code Playgroud)

jquery css-position live

2
推荐指数
1
解决办法
4099
查看次数

Javascript RegEx replace有条件地删除字符串的一部分

我正在尝试使用Javascript RegEx命令将这些输入转换为以下输出:

INPUT                      DESIRED OUTPUT
mydomain.com          -->  mydomain.com
foo.mydomain.com      -->  mydomain.com
dev.mydomain.com      -->  dev.mydomain.com
dev-foo.mydomain.com  -->  dev.mydomain.com
Run Code Online (Sandbox Code Playgroud)

这是规则:

  • 从域中删除子域,除非子域以字符"dev"开头
  • 如果子域以"dev"开头,则输出"dev.domain.com"
  • 保留域末尾指定的任何端口

我的正则表达能力让我失望.这是我到目前为止:

'mydomain.com'.replace(/^(dev)?(-.*)?(mydomain.com)/,'$1.$3'); 
// .mydomain.com

'foo.mydomain.com'.replace(/^(dev)?(-.*)?(mydomain.com)/,'$1.$3'); 
// foo.mydomain.com

'dev-foo.mydomain.com'.replace(/^(dev)?(-.*)?(mydomain.com)/,'$1.$3'); 
// dev.mydomain.com

'dev.mydomain.com'.replace(/^(dev)?(-.*)?(mydomain.com)/,'$1.$3'); 
// dev.mydomain.com
Run Code Online (Sandbox Code Playgroud)

前两个失败,后两个失败.有什么建议?

这里的javascript有效,但我希望将它组合成一个正则表达式替换命令.请注意,我还想保留在dmain末尾指定的任何端口.

var getHost = function () {
  var host = window.location.host;
  if (host.substring(0,3) === 'dev') {
    return host.replace(/^(dev)?(-.*)?(mydomain\.com.*)/,'$1.$3');
  }
  else {
    return 'mydomain.com';
  }
}
Run Code Online (Sandbox Code Playgroud)

javascript regex

2
推荐指数
1
解决办法
5143
查看次数