Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 日期类问题:日期对象被设置为我未设置的对象_Java - Fatal编程技术网

Java 日期类问题:日期对象被设置为我未设置的对象

Java 日期类问题:日期对象被设置为我未设置的对象,java,Java,我正试图给列车时刻表添加一个延迟。我已经使用日期对象完成了列车到达和离开。当我第一次打印时间表时,所有内容都显示了正确的到达和离开时间。 然而,在埃德蒙顿和之后的所有车站增加了30分钟的延迟。 一些到达和离开时间变得不正确。 延误只会使到达和离开时间倒退,但会改变一些城市之间的出行时间 我让我的接球手和二传手都是这样的: /** *到达日期变量的访问器。返回到达日期的副本。 *@return-到达日期的副本 */ 公共日期getArrivalDate() { //返回原始日期的副本 return

我正试图给
列车时刻表添加一个延迟
。我已经使用
日期
对象完成了列车到达和离开。当我第一次打印时间表时,所有内容都显示了正确的到达和离开时间。 然而,在埃德蒙顿和之后的所有车站增加了30分钟的延迟。 一些到达和离开时间变得不正确。 延误只会使到达和离开时间倒退,但会改变一些城市之间的出行时间

我让我的接球手和二传手都是这样的:

/**
*到达日期变量的访问器。返回到达日期的副本。
*@return-到达日期的副本
*/
公共日期getArrivalDate()
{
//返回原始日期的副本
return(Date)arrival.clone();
}
/**
*到达日期变量的变量。
*@param arrival-要设置的日期
*/
公共作废设置到达日期(到达日期)
{
//使用传入日期的副本
this.arrival=(Date)arrival.clone();
}
这是我增加延迟的方法 我使用
站点
对象的
链接列表
来保存计划:

公共无效延迟(字符串站,整数分钟){
//对站点的顺序搜索
//遍历站点的列表
布尔延迟点=假;
//1)调整一天中的时间
//向到达和离开日期对象添加延迟
用于(当前站点:计划){
//在检查延迟城市之前先检查延迟
//我们将在打开时看到delayPoint变量的设置
//环路就在延迟站后面的车站
//如果在延迟点之后
如果(延迟点){
//然后将延迟添加到到达日期
Date arrivalDate=current.getArrivalDate();
long arrivalTime=current.getArrivalDate().getTime();
到达时间+=分钟*分钟到毫秒;
arrivalDate.setTime(到达时间);
当前.设置到达日期(到达日期);
//加上出发日期的延迟
Date departureDate=当前。getDepartureDate();
long departTime=current.getDepartureDate().getTime();
出发时间+=分钟*分钟到毫秒;
出发日期。设定时间(出发时间);
当前。设置离开日期(离开日期);
}//如果站点与延迟点匹配
else if(current.getCity().equals(Station)){
//然后设置布尔值
延迟点=真;
//再加上起飞的延误
Date departureDate=当前。getDepartureDate();
long departTime=current.getDepartureDate().getTime();
出发时间+=分钟*分钟到毫秒;
出发日期。设定时间(出发时间);
当前。设置离开日期(离开日期);
}
}
//2)调整行程日期
}

请,谢谢你,

Ahsen Husain.

这是一种可能的解决方案(基于java 8和java.time api)

站级

    public class Station {
        private long id;
        private String name;
        private Date arrivalDate;
        private Date departureDate; ....getters and setters
站点阵列列表

    List<Station> myStations = Arrays.asList(
            new Station(1,"City1",new Date(),new Date()),
            new Station(2,"City2",new Date(),new Date()),
            new Station(3,"City3",new Date(),new Date()),
            new Station(4,"City4",new Date(),new Date())
    );
获取与CityName相等的站点(此时我正在展示一个表示foor循环的替代方案)

当前站点等于城市名称,因此让我们添加延迟

delay(current,minutes,false);
现在将延迟添加到下一个站点(假设下一个站点的id大于当前站点)

延迟方法(此延迟方法基于java.time api)

从日期LocaleDateTime转换的Helpers方法

public static  LocalDateTime getLocalDateTimeFromDate(Date date){
    return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
}

public static Date getDateFromLocalDateTime(LocalDateTime localDateTime){
    return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
这个替代方案基于使用LocalDateTime的java.time api,java.time非常适合我。对于java.uitl.Date,有很多转换要做,很难处理。如果您有兴趣了解更多关于java.time的信息,这里有一个教程


希望有帮助。

你能告诉我们通过
this.arrival=new Date(arrival.getTime())调用
delay()
methodClone
Date
delay(current,minutes,false);
myStations.stream()
                .filter(s -> s.getId()>current.getId())
                .collect(Collectors.toList())
                .forEach(s -> delay(s,minutes,true));
public static void delay(Station current, int minutes, boolean isDelay){
    System.out.println("Current Station | Before: " + current);
    LocalDateTime stationArrival =null;
    LocalDateTime stationDeparture=null;


    if (current !=null && isDelay){
        stationArrival = getLocalDateTimeFromDate(current.getArrivalDate());
        stationDeparture = getLocalDateTimeFromDate(current.getDepartureDate());
        stationArrival=stationArrival.plusMinutes(minutes);
        stationDeparture=stationDeparture.plusMinutes(minutes);
        current.setArrivalDate(getDateFromLocalDateTime(stationArrival));
        current.setDepartureDate(getDateFromLocalDateTime(stationDeparture));
    }else if(current!=null && !isDelay){
        stationDeparture = getLocalDateTimeFromDate(current.getDepartureDate());
        stationDeparture= stationDeparture.plusMinutes(minutes);
        current.setDepartureDate(getDateFromLocalDateTime(stationDeparture));
    }

    System.out.println("Current Station | After: " + current);
}
public static  LocalDateTime getLocalDateTimeFromDate(Date date){
    return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
}

public static Date getDateFromLocalDateTime(LocalDateTime localDateTime){
    return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}