处理一段根据字符串记录的时段方案,可以按照方案取不同电价的起止时间,进而从实时数据中读取差值,记录用电量
Map<Integer,Integer> pm = Maps.newHashMap();
List<Integer> key = Lists.newArrayList();
String peakValley = "000000012222111111133220"; //时段方案,0~3分别代表谷平峰尖
int interval = peakValley.length()==24 ? 2 : 1; //1小时制为24长度,半小时制为48个长度
key.add(0);
pm.put(0,0);
for(int i=1;i<peakValley.length();i++){
if(peakValley.charAt(i-1)!=peakValley.charAt(i)){
pm.put(i*interval ,Integer.parseInt(String.valueOf(peakValley.charAt(i-1))));
key.add(i*interval);
}
if(i == peakValley.length()-1){
pm.put(((i+1)*interval) ,Integer.parseInt(String.valueOf(peakValley.charAt(i))));
key.add((i+1)*interval);
}
}
for(Integer j:key){
if(j==0)continue;
System.out.println((j/2)+":"+ (j%2==1?"30":"00")+" "+pm.get(j));
}
输出为:
7:00 0
8:00 1
12:00 2
19:00 1
21:00 3
23:00 2
24:00 0
从0-7点为谷(0),7-8点为平(1),如果不好看出来,那这样输出:
Date day = new Date();
for(int i=1;i<key.size();i++){
day.setTime(1557072000000L+key.get(i-1)*1800*1000); //1557072000000L 今日00:00
System.out.println(day);
day.setTime(1557072000000L+key.get(i)*1800*1000);
System.out.println(day);
System.out.println(pm.get(key.get(i)));
}
输出:
Mon May 06 00:00:00 CST 2019
Mon May 06 07:00:00 CST 2019
0
Mon May 06 07:00:00 CST 2019
Mon May 06 08:00:00 CST 2019
1
Mon May 06 08:00:00 CST 2019
Mon May 06 12:00:00 CST 2019
2
Mon May 06 12:00:00 CST 2019
Mon May 06 19:00:00 CST 2019
1
Mon May 06 19:00:00 CST 2019
Mon May 06 21:00:00 CST 2019
3
Mon May 06 21:00:00 CST 2019
Mon May 06 23:00:00 CST 2019
2
Mon May 06 23:00:00 CST 2019
Tue May 07 00:00:00 CST 2019
0
直接把两个时间传入取读书差的方法就可以得到不同时段的用电量了