Date, SimpleDateFormat, LoaclDate - Yash-777/MyWorld GitHub Wiki
Learn Java Date wiki, OS Date samples
DATE: From List of Products, Find the most recent Sale product item info
public class DatesTest {
static String[] datePatterns = {
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "yyyy-MM-dd'T'HH:mm:ss"
};
public static void main(String[] args) throws ParseException {
String dateStr = "2019-07-25T18:00:00.000Z";
Date parseDate = parseDate(dateStr, datePatterns[0]);
System.out.println("Date :"+parseDate);
System.out.println("LocalDate: "+getLocalDate(parseDate));
System.out.println("OffsetDateTime: "+getOffsetDateTime(parseDate));
List<Product> productList = Arrays.asList(
getProduct(1, 100, "Product 1", "2019-07-25T18:00:00.000Z", "2019-01-01T00:00:00.000Z"),
getProduct(2, 200, "Product 2", "2021-05-10T10:00:00.000Z", "2022-03-15T00:00:00.000Z"),
getProduct(3, 150, "Product 3", "2022-09-05T08:00:00.000Z", "2021-11-30T00:00:00.000Z"),
getProduct(4, 300, "Product 4", "2022-09-05T07:00:00.000Z", "2022-03-16T00:00:00.000Z")
);
// Find the most recent sale date
String mostRecentSaleDate = productList.stream()
.map(Product::getSaleDate)
.max(Comparator.naturalOrder()).orElse(null);
System.out.println("Most Recent Sale Date: " + mostRecentSaleDate);
// Find the most recent manufactured date
Date mostRecentManufacturedDate = productList.stream()
.map(Product::getManufacturedDate)
.max(Comparator.naturalOrder()).orElse(null);
System.out.println("Most Recent Manufactured Date: " + mostRecentManufacturedDate);
// Find the most recent Sale product item info
Product mostRecentSaledProduct = productList.stream()
.max(Comparator.comparing(p -> parseDate(p.getSaleDate(), datePatterns[0]) )).orElse(null);
System.out.println("Most Recent Sale: " + mostRecentSaledProduct);
// Find the most recent manufactured product item info
Product mostRecentManufacturedProduct = productList.stream()
.max(Comparator.comparing(Product::getManufacturedDate)).orElse(null);
System.out.println("Most Recent Manufactured: " + mostRecentManufacturedProduct);
Product mostRecentManufacturedProductOffset = productList.stream()
.max(Comparator.comparing(Product::getOffsetDateTime)).orElse(null);
System.out.println("Most Recent Manufactured OffsetDateTime: " + mostRecentManufacturedProductOffset);
}
public static Product getProduct(int id, int price, String name, String saleDate, String mnfDate) {
Date parseDate = parseDate(mnfDate, datePatterns[0]);
return Product.builder().id(id).price(price)
.name(name).saleDate(saleDate)
.manufacturedDate( parseDate )
.localDate( getLocalDate(parseDate) )
.offsetDateTime( getOffsetDateTime(parseDate) )
.build();
}
public static Date parseDate(String dateStr, String datePattern) {
try {
// Create a SimpleDateFormat object with the desired date format
DateFormat dateFormat = new SimpleDateFormat( datePattern );
// Parse the string date to obtain a Date object
Date date = dateFormat.parse(dateStr);
return date;
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
static ZoneId defaultZone = ZoneId.systemDefault(); // ZoneId.of("UTC");
public static LocalDate getLocalDate(Date dateTime) {
return dateTime.toInstant().atZone( defaultZone ).toLocalDate();
}
public static LocalDateTime getLocalDateTime(Date dateTime) {
return dateTime.toInstant().atZone( defaultZone ).toLocalDateTime();
}
public static OffsetDateTime getOffsetDateTime(Date dateTime) {
LocalDateTime localDateTime = getLocalDateTime(dateTime);
ZoneOffset offset = defaultZone.getRules().getOffset( localDateTime );
//return dateTime.toInstant().atOffset(offset);
return OffsetDateTime.of(localDateTime, offset);
}
}
@Data @Builder
class Product {
int id, price;
String name, saleDate;
java.util.Date manufacturedDate;
java.time.LocalDate localDate;
java.time.OffsetDateTime offsetDateTime;
}