参数化 ZonedDateTime 方法
Parametrize ZonedDateTime method
我有一个参数化方法:
private static Date getTimeFor(int hour, int minute, int second, int nanoSecond, String zoneId) {
ZonedDateTime time = ZonedDateTime.now()
.withZoneSameLocal(ZoneId.of(zoneId))
.withHour(hour)
.withMinute(minute)
.withSecond(second)
.withNano(nanoSecond);
return Date.from(time.toInstant());
}
其次是:
private Date getRomeStartTime(){
return getTimeFor(8,30,0,0,"Europe/Rome");
}
private Date getParisStartTime(){
return getTimeFor(9,30,0,0,"Europe/Paris");
}
private Date getLondonStartTime(){
return getTimeFor(9,00,0,0,"Europe/London");
}
随着更多城市的加入,这种情况很快就会失控。我的目标是只制作 public/expose 下面的方法并将 StartTimes 的构造委托给其他地方:
public Date getEffectiveTimeFor(String zoneId){
// Delegate construction as per zoneId elsewhere
// dont want to use a long-winded if-else statement
}
我不能使用策略模式,因为我不应该传递一个对象,而只能传递一个字符串。
这里最好的方法是什么?
(p.s。我有到return旧的Date
,这就无从谈起了)
您可以简单地使用 Map<String, LocalTime>
来存储每个区域 ID 的开始时间。然后在您的方法中从此地图获取开始时间并从那里创建日期。
我有一个参数化方法:
private static Date getTimeFor(int hour, int minute, int second, int nanoSecond, String zoneId) {
ZonedDateTime time = ZonedDateTime.now()
.withZoneSameLocal(ZoneId.of(zoneId))
.withHour(hour)
.withMinute(minute)
.withSecond(second)
.withNano(nanoSecond);
return Date.from(time.toInstant());
}
其次是:
private Date getRomeStartTime(){
return getTimeFor(8,30,0,0,"Europe/Rome");
}
private Date getParisStartTime(){
return getTimeFor(9,30,0,0,"Europe/Paris");
}
private Date getLondonStartTime(){
return getTimeFor(9,00,0,0,"Europe/London");
}
随着更多城市的加入,这种情况很快就会失控。我的目标是只制作 public/expose 下面的方法并将 StartTimes 的构造委托给其他地方:
public Date getEffectiveTimeFor(String zoneId){
// Delegate construction as per zoneId elsewhere
// dont want to use a long-winded if-else statement
}
我不能使用策略模式,因为我不应该传递一个对象,而只能传递一个字符串。 这里最好的方法是什么?
(p.s。我有到return旧的Date
,这就无从谈起了)
您可以简单地使用 Map<String, LocalTime>
来存储每个区域 ID 的开始时间。然后在您的方法中从此地图获取开始时间并从那里创建日期。