目录
一、项目需求:
编写一个程序,每天凌晨3点模拟生成当天的新能源车辆数据(字段信息必须包含:车架号、行驶总里程、车速、车辆状态、充电状态、剩余电量SOC、SOC低报警、数据生成时间等)。
1、车辆数据要按天存储,数据格式是JSON格式,另外如果数据文件大于100M,则另起一个文件存。每天的数据总量不少于300M。比如假设程序是2023-01-1 03点运行,那么就将当前模拟生成的数据写入到HDFS的/can_data/2023-01-01文件夹的can-2023-01-01.json文件中,写满100M,则继续写到can-2023-01-01.json.2文件中,依次类推;
2、每天模拟生成的车辆数据中,必须至少包含20辆车的数据,即要含有20个车架号(一个车架号表示一辆车,用字符串表示);
3、每天生成的数据中要有少量(20条左右)重复数据(所有字段都相同的两条数据则认为是重复数据),且同一辆车的两条数据的数据生成时间间隔两秒;
4、每天生成的数据中要混有少量前几天的数据(即数据生成时间不是当天,而是前几天的)。
二、Java 日期时间
第一个构造函数使用当前日期和时间来初始化对象。
Date( )
第二个构造函数接收一个参数,该参数是从 1970 年 1 月 1 日起的毫秒数。
Date(long millisec)
Date 对象创建以后,可以调用下面的方法。
序号 | 方法和描述 | |
1 |
| |
2 |
| |
3 |
| |
4 |
| |
5 |
| |
6 | boolean equals(Object date) 当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。 | |
7 |
| |
8 |
| |
9 | void setTime(long time) 用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。 | |
10 |
|
Java使用以下三种方法来比较两个日期:
- 使用 getTime() 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较这两个值。
- 使用方法 before(),after() 和 equals()。例如,一个月的12号比18号早,则 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。
- 使用 compareTo() 方法,它是由 Comparable 接口定义的,Date 类实现了这个接口。\
三、使用 SimpleDateFormat 格式化日期
SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。
例如:
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String[] args) {
Date dNow = new Date( );
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
System.out.println("当前时间为: " + ft.format(dNow));
}
}
这一行代码确立了转换的格式,其中 yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是时、分、秒。
注意:有的格式大写,有的格式小写,例如 MM 是月份,mm 是分;HH 是 24 小时制,而 hh 是 12 小时制。
四、生成时间数据
先生成时间再进行格式转换,再获取建立时间
public static String randomTime(String startDate,String endDate){
//时间的格式
String dateTime = null;
long result = 0;
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
//转化
Date start = null;
try {
start = format1.parse(startDate);
Date end = format1.parse(endDate);
//获取建立时间
result = start.getTime() + (long) (Math.random() * (end.getTime() - start.getTime()));
SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateTime = format2.format(result);
return dateTime;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
五、获取时间列表
public static List<String> getTimeList(int num) throws ParseException {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date date=new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, -3);
date = calendar.getTime();
Date date1=new Date();
List<String> vinList = new ArrayList<String>();
for(int i =0;i<num;i++){
vinList.add(randomTime(sdf.format(date), sdf.format(date1)));
}
return vinList;
}