abstract_date 1.0.2 abstract_date: ^1.0.2 copied to clipboard
Abstract date is a fluent abstract date system for working with different date types.
abstract_date #
// registering the date systems that we want to use.
// if you don't register any adapters then
// the default adapters are going to get registered automatically.
Date.addType<ShamsiDate>(ShamsiDate());
Date.addType<GregorianDate>(GregorianDate());
// Creating a new date
var date = Date<ShamsiDate>(1379,6,26);
// Converting dates
var converted = date.to<GregorianDate>();
date = converted.to<Shamsi>();
// Type checking
if(date.isTypeOf<ShamsiDate>()){
print('its shamsi!');
}
// Other utility methods
var tomorrow = date.add(Duration(days: 1));
Duration d = date.difference(tomorrow);
var realTomorrow = date.copy(
day: date.day + 1,
);
Date adapters #
###Adding Adapters:
Before using Date
you should register the types you want to use.
Date.addType<ShamsiDate>(ShamsiDate());
Date.addType<GregorianDate>(GregorianDate());
Setting a default adapter #
For setting an adapter as default, just register it with no generic type.
Date.addType(ShamsiDate());
...
// no generic type is used
var defaultDate = Date.now();
Implementing a new Date adapter #
class NewDateSystem extends DateAdapter with DateFormatter {
...
}
If you don't add the DateFormatter
mixin, some methods on date will throw an exception:
formatter
monthName
weekDayName
formatted
*formatBuilder
*
*: these might not throw exception if you don't use named parts.
Renaming Adapters #
If you don't like the name of a certain adapter, just extend it and register with the new class:
class Hijri extends IslamicDate {}
...
Date.addType<Hijri>(Hijri());
DateAdapter provided implementations #
- GregorianDate
- HijriDate
- ShamsiDate
To use them, import abstract_date and
then register them using
Date.addType<T extends DateAdapter>()
before using them.