anchor.diff:    } else if (!s.contains('Z')) {
       throw new FormatException();
     }
  -  
  +
     var stopIdx = symbolIdx != -1 ? symbolIdx : s.length - 1;
     var fraction = '0' + '.' + s.substring(startIdx, stopIdx);
     var ms = double.parse(fraction) * 1000;
  
positive.code: String toGeneralizedTime(DateTime datetime) {
    var d = datetime.toUtc();
    var ms = d.millisecond;
    var fraction = ms != 0 ? '.' + ms.toString() : '';
    var str = '' +
      _pad4(d.year) +
      _pad2(d.month) +
      _pad2(d.day) +
      _pad2(d.hour) +
      _pad2(d.minute) +
      _pad2(d.second) +
      fraction + 'Z';
    return str;
  }
  
  /**
  
negative.code: library ldap2date;
  
  String _pad2(int n) {
    if (n < 10) return '0$n';
    return n.toString();
  }
  
  String _pad4(int n) {
    if (n < 10) return '000$n';
    if (n < 100) return '00$n';
    if (n < 1000) return '0$n';
    return n.toString();
  }
  
  