前言:
现在朋友们对“当前日期前一天 java”大体比较关切,姐妹们都需要知道一些“当前日期前一天 java”的相关内容。那么小编同时在网摘上汇集了一些有关“当前日期前一天 java””的相关内容,希望同学们能喜欢,你们快快来了解一下吧!让我们想象一下,我们想通过一条消息向另一个国家(不同时区)的朋友打招呼,例如根据他当地时间的“早上好”,“下午好”等。因此,仅获取AM/PM标志是不够的,因为我们认为一天(24小时)可以由以下时间段表示:
21:00 PM – 6:00 AM - 夜间
6:00 AM – 12:00 AM - 早晨
12:00 AM – 18:00 PM - 下午
18:00 PM – 21:00 PM - 晚上
**在JDK 16之前**
首先,我们需要获取对应于我们朋友时区的时间。为此,我们可以从本地时间开始,本地时间可以是java.util.Date、java.time.LocalTime等。如果我们从java.util.Date开始,那么我们可以通过以下方式获取我们朋友时区的时间:
LocalTime lt = date.toInstant().atZone(zoneId).toLocalTime();
这里,date是new Date(),zoneId是java.time.ZoneId。当然,我们可以将时区ID作为字符串传递,并使用ZoneId.of(String zoneId)方法获取ZoneId实例。如果我们更喜欢从LocalTime.now()开始,那么我们可以通过以下方式获取我们朋友时区的时间:
LocalTime lt = LocalTime.now(zoneId);
接下来,我们可以定义一天的时间段为一组LocalTime,并添加一些条件来确定当前的时间段。以下代码示例说明了这个声明:
public static String toDayPeriod(Date date, ZoneId zoneId) { LocalTime lt = date.toInstant().atZone(zoneId).toLocalTime(); LocalTime night = LocalTime.of(21, 0, 0); LocalTime morning = LocalTime.of(6, 0, 0); LocalTime afternoon = LocalTime.of(12, 0, 0); LocalTime evening = LocalTime.of(18, 0, 0); LocalTime almostMidnight = LocalTime.of(23, 59, 59); LocalTime midnight = LocalTime.of(0, 0, 0); if((lt.isAfter(night) && lt.isBefore(almostMidnight)) || lt.isAfter(midnight) && (lt.isBefore(morning))) { return "night"; } else if(lt.isAfter(morning) && lt.isBefore(afternoon)) { return "morning"; } else if(lt.isAfter(afternoon) && lt.isBefore(evening)) { return "afternoon"; } else if(lt.isAfter(evening) && lt.isBefore(night)) { return "evening"; } return "day";}
**在JDK 16+**
从JDK 16+开始,我们可以通过以下字符串超越AM/PM标志:in the morning, in the afternoon, in the evening, and at night。这些友好的输出可以通过新的模式B获得。这种模式是从JDK 16+开始通过DateTimeFormatter和DateTimeFormatterBuilder(你应该熟悉这些API,来自第1章,问题15)提供的。
因此,以下代码使用DateTimeFormatter来示例模式B的使用,代表一天的时间段:
public static String toDayPeriod(Date date, ZoneId zoneId) { ZonedDateTime zdt = date.toInstant().atZone(zoneId); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MMM-dd [B]"); return zdt.withZoneSameInstant(zoneId).format(formatter);}
这是澳大利亚/墨尔本的输出示例:
2023-Feb-04 at night
你可以在打包的代码中看到更多的示例。请随意挑战自己,调整此代码以重现第一个示例的结果。
标签: #当前日期前一天 java