long类型的时间格式改成String类型的yyyy-mm-dd类型
时间: 2024-03-02 20:48:46 浏览: 159
如果您有一个 long 类型的时间戳,表示自1970年1月1日以来的毫秒数,您可以使用 Java 中的 SimpleDateFormat 类将其转换为字符串类型,并使用它来获取日期的不同部分,例如年、月、日等。以下是一个示例代码:
```
long timestamp = 1666195200000L; // 2022-11-20 00:00:00 的时间戳
Date date = new Date(timestamp);
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = dateFormat.format(date);
System.out.println(formattedDate);
```
在上面的代码中,我们首先定义了一个 long 类型的时间戳 `timestamp`,表示自1970年1月1日以来的毫秒数。然后,我们使用 `Date` 类的构造函数将时间戳转换为日期类型。接下来,我们创建了一个 SimpleDateFormat 对象,该对象将日期格式化为 "yyyy-MM-dd" 格式,最后使用 `format()` 方法将日期格式化为字符串并打印输出。
相关问题
long类型的时间格式改成yyyy-mm-dd类型
如果你的long类型时间格式是以毫秒为单位的Unix时间戳,可以使用以下方法将其转换为`yyyy-MM-dd`类型的日期字符串:
```java
long timestamp = 1621070819000L; // 示例时间戳
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String dateString = dateFormat.format(new Date(timestamp));
```
如果你的long类型时间格式是以秒为单位的Unix时间戳,需要将其乘以1000再转换为`yyyy-MM-dd`类型的日期字符串:
```java
long timestamp = 1621070819L; // 示例时间戳
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String dateString = dateFormat.format(new Date(timestamp * 1000));
```
需要注意的是,`SimpleDateFormat`类在多线程环境下不安全,如果需要在多线程环境下使用,请使用线程安全的日期时间格式化类,如`DateTimeFormatter`类。
JAVA 1.传入设备工作时段字符串,格式为String(HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm), 2.传入设备工作开始日期时间(Date类型yyyy-MM-dd hh:mm:ss) 3.传入设备工作结束日期时间(Date类型yyyy-MM-dd hh:mm:ss) 4.传入一个指定天(Date类型yyyy-MM-dd),该天已知在工作开始和结束日期之间 5.计算第四步这天设备工作了多少分钟 单位(分钟)
以下是Java代码实现:
```java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DeviceWorkingTime {
public static void main(String[] args) throws ParseException {
String workTimeStr = "09:00-12:00;13:00-18:00"; // 设备工作时段字符串
Date workStartTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2021-10-01 09:00:00"); // 设备工作开始日期时间
Date workEndTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2021-10-05 18:00:00"); // 设备工作结束日期时间
Date specifiedDay = new SimpleDateFormat("yyyy-MM-dd").parse("2021-10-03"); // 指定天
int minutes = calculateWorkingMinutes(workTimeStr, workStartTime, workEndTime, specifiedDay);
System.out.println("设备在指定天工作了 " + minutes + " 分钟");
}
/**
* 计算指定天设备工作的分钟数
*
* @param workTimeStr 设备工作时段字符串,格式为HH:mm-HH:mm;HH:mm-HH:mm;...
* @param workStartTime 设备工作开始日期时间
* @param workEndTime 设备工作结束日期时间
* @param specifiedDay 指定天
* @return 指定天设备工作的分钟数
* @throws ParseException 解析日期字符串异常
*/
private static int calculateWorkingMinutes(String workTimeStr, Date workStartTime, Date workEndTime, Date specifiedDay) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
long specifiedDayStartTime = sdf.parse(sdf.format(specifiedDay) + " 00:00").getTime(); // 指定天起始时间
long specifiedDayEndTime = specifiedDayStartTime + 24L * 60 * 60 * 1000 - 1; // 指定天结束时间
String[] workTimeArr = workTimeStr.split(";");
long totalWorkingMinutes = 0;
for (String workTime : workTimeArr) {
String[] timeRange = workTime.split("-");
Date startTime = sdf.parse(timeRange[0]);
Date endTime = sdf.parse(timeRange[1]);
long workStartTimeMs = specifiedDayStartTime + startTime.getTime();
long workEndTimeMs = specifiedDayStartTime + endTime.getTime();
if (workStartTimeMs < workStartTime.getTime()) {
workStartTimeMs = workStartTime.getTime();
}
if (workEndTimeMs > workEndTime.getTime()) {
workEndTimeMs = workEndTime.getTime();
}
if (workStartTimeMs < workEndTimeMs) {
totalWorkingMinutes += (workEndTimeMs - workStartTimeMs) / 1000L / 60;
}
}
return (int) totalWorkingMinutes;
}
}
```
首先,我们使用`SimpleDateFormat`类解析日期字符串,得到设备工作开始、结束日期时间和指定天的日期对象。
接着,我们需要将指定天转换为毫秒数表示的起始时间和结束时间,方便后续计算。
然后,我们按照设备工作时段字符串的格式解析出每个工作时间段的起始时间和结束时间,并根据指定天的起始时间和结束时间、设备工作开始时间和结束时间进行比较,得到该时间段内设备实际工作的时间。最后,将所有时间段的工作时间累加起来即可得到指定天设备工作的分钟数。注意要将累加结果转换为整数类型返回。
以上就是计算设备工作时间的Java代码实现。
阅读全文