import { Observable, Subject } from 'rxjs';
import { InjectionToken } from '@angular/core';
export declare const NT_DATE_LOCALE: InjectionToken<string>;
export declare function NT_DATE_LOCALE_FACTORY(): string;
export declare abstract class DateAdapter<D> {
    protected locale: any;
    get localeChanges(): Observable<void>;
    protected _localeChanges: Subject<void>;
    abstract getYear(date: D): number;
    abstract getMonth(date: D): number;
    abstract getDate(date: D): number;
    abstract getMilliseconds(date: D): number;
    abstract getDayOfWeek(date: D): number;
    abstract getMonthNames(style: 'long' | 'short' | 'narrow', locale?: string): string[];
    abstract getDateNames(locale?: string): string[];
    abstract getDayOfWeekNames(style: 'long' | 'short' | 'narrow', locale?: string): string[];
    abstract getYearName(date: D, locale?: string): string;
    abstract getFirstDayOfWeek(): number;
    abstract getNumDaysInMonth(date: D): number;
    abstract clone(date: D): D;
    abstract createDate(year: number, month: number, date: number): D;
    abstract today(): D;
    abstract parse(value: any, parseFormat: any): D | null;
    abstract format(date: D, displayFormat: any, locale?: string): string;
    abstract addCalendarYears(date: D, years: number): D;
    abstract addCalendarMonths(date: D, months: number): D;
    abstract addCalendarDays(date: D, days: number): D;
    abstract toIso8601(date: D): string;
    abstract isDateInstance(obj: any): boolean;
    abstract isValid(date: D): boolean;
    abstract invalid(): D;
    deserialize(value: any): D | null;
    setLocale(locale: any): void;
    compareDate(first: D, second: D): number;
    sameDate(first: D | null, second: D | null): boolean;
    clampDate(date: D, min?: D | null, max?: D | null): D;
}
