首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

各位大侠帮忙看看这个算法应该如何写,多谢

2012-09-03 
各位大侠帮忙看看这个算法应该怎么写,谢谢!假定上班时间为2012-08-13 08:00:00,员工的班制为干12小时休24

各位大侠帮忙看看这个算法应该怎么写,谢谢!
假定上班时间为2012-08-13 08:00:00,员工的班制为干12小时休24小时

如何判断某个时间是否上班?

例如:2012-08-13 03:50:00、2012-08-13 08:50:00、2012-08-13 21:50:00是否上班?

谢谢!

[解决办法]

Java code
        String s = "2012-08-13 08:00:00";        String[] arr = new String[] { "2012-08-13 03:50:00", "2012-08-13 08:50:00", "2012-08-13 21:50:00" };        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        long d = sdf.parse(s).getTime();        for (String a : arr) {            long t = sdf.parse(a).getTime();            long c = (t - d) / 1000 / 60 / 60;            if (c >= 0 && c / 12 % 3 == 0 || c < 0 && c / 12 % 3 != 0) {                System.out.println(a + " : 上班");            } else {                System.out.println(a + " : 休息");            }        }
[解决办法]
探讨
假定上班时间为2012-08-13 08:00:00,员工的班制为干12小时休24小时
如何判断某个时间是否上班?
例如:2012-08-13 03:50:00、2012-08-13 08:50:00、2012-08-13 21:50:00是否上班?

[解决办法]
for example

Java code
public static boolean isWorking(    String checkStr,     String baseStr,     long workTime,    long restTime) throws Exception {    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    long base = sdf.parse(baseStr).getTime();    long target = sdf.parse(checkStr).getTime();    long mod = (target-base) % (workTime+restTime);    if (mod < 0) mod += (workTime+restTime);    return mod < workTime;}//testString base = "2012-08-13 08:00:00";String[] date = {"2012-08-13 03:50:00", "2012-08-13 08:50:00", "2012-08-13 21:50:00"};for (String s : date) {    if (isWorking(s, base, 12*60*60*1000, 24*60*60*1000)) {        System.out.printf("%s: work\n", s);    } else {        System.out.printf("%s: rest\n", s);    }  }
[解决办法]
如果用 6 楼的建议的话,是:
int segment = (int) ((hour / 24) % 3); // 计算出所属时段,0则说明是上班时间。

此外,你的上班时间,应该精确到小时,而非天;因为8月14日8点以前是上班时间而8点以后则不是。

热点排行