}
public Node external_mutator_add_delta(Node startAt) throws Exception {
startAt.isGoodArgsLength(true, 2);
SELF.require_SELF_mutable();
Node anode = startAt.getSubNode(1, Node.TYPE_HASH | Node.TYPE_NUMBER);
if (anode.getQType()==Node.TYPE_NUMBER) {
date.setTime(date.getTime() + (long) anode.getNumber());
}
else {
// hash
Hash hash = anode.getHash();
Calendar c = Calendar.getInstance();
c.setTime(date);
Node tmp;
tmp = getNumPairValue(hash, new Node(K_HOUR));
if (tmp != null) {
c.add(Calendar.HOUR, (int) tmp.getNumber());
}
tmp = getNumPairValue(hash, new Node(K_MINUTE));
if (tmp != null) {
c.add(Calendar.MINUTE, (int) tmp.getNumber());
}
tmp = getNumPairValue(hash, new Node(K_SECOND));
if (tmp != null) {
c.add(Calendar.SECOND, (int) tmp.getNumber());
}
tmp = getNumPairValue(hash, new Node(K_MILLIS));
if (tmp != null) {
c.add(Calendar.MILLISECOND, (int) tmp.getNumber());
}
tmp = getNumPairValue(hash, new Node(K_YEAR));
if (tmp != null) {
c.add(Calendar.YEAR, (int) tmp.getNumber());
}
tmp = getNumPairValue(hash, new Node(K_MONTH));
if (tmp != null) {
c.add(Calendar.MONTH, (int) tmp.getNumber());
}
tmp = getNumPairValue(hash, new Node(K_DAY));
if (tmp != null) {
c.add(Calendar.DATE, (int) tmp.getNumber());
}
date = c.getTime();
}
return null;
}