Orientação gerada a partir de informações públicas. Apenas para referência.
time_machine é uma biblioteca abrangente de datas e horas para Flutter, Web e aplicações de servidor, oferecendo suporte robusto a fuso horário, múltiplos calendários, formatação cultural e análise. Ela fornece um tratamento preciso e consistente de datas entre plataformas, garantindo comportamento confiável independentemente do ambiente. Projetada com experiência do desenvolvedor em mente, simplifica operações complexas de datas mantendo alto desempenho e precisão.
Casos de uso
Manipulando datas com fuso horário
Análise e formatação de strings de data internacionais
Suporte a calendários não-gregoriano
Construindo aplicativos de calendário ou agendamento
Consistência de data multiplataforma
Exibição de datas internacionalizadas
Principais recursos
Suporte completo de fuso horário
Compatibilidade com múltiplos calendários
Formatação culturalmente consciente
Utilitários de análise robustos
API independente de plataforma
Objetos de data imutáveis
Indicado para
Aplicações globais que exigem localização
Aplicativos com necessidades complexas de agendamento
Desenvolvedores que precisam de cálculos precisos de tempo
Projetos direcionados para múltiplas plataformas
Equipes que priorizam a consistência do código
Considerações
Requer curva de aprendizado para novos usuários
Pode aumentar levemente o tamanho do aplicativo
Documentação da comunidade limitada em comparação com alternativas
Não compatível com APIs nativas de data diretamente
Mais adequado para projetos em que precisão e flexibilidade são críticas
README original
Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.
The Dart Time Machine is a date and time library for
Flutter, Web, and Server
with support for timezones, calendars, cultures, formatting and parsing.
Time Machine provides an alternative date and time API over Dart Core.
For comparision:
Dart Core API
Duration - an amount of time with microsecond precision
DateTime - a unique point on the utc_timeline or a point in localtime with microsecond or millisecond precision
Time Machine API
Time - an amount of time with nanosecond precision
Instant - a unique point on the utc_timeline
LocalTime - the time on the clock
LocalDate - the date on the calendar
LocalDateTime - a location on the clock and calendar
Period - amount of time on the clock and calendar
Offset - the timezone offset from the utc_timeline
DateTimeZone - a mapping between the utc_timeline, and clock and calendar locations
ZonedDateTime - a unique point on the utc_timeline and a location on the clock and calendar
Culture - formatting and parsing rules specific to a locale
Time Machine's Goals
Flexibility - multiple representations of time to fit different use cases
Consistency - works the same across all platforms
Testable - easy to test your date and time dependent code
Clarity - clear, concise, and intuitive
Easy - the library should do the hard things for you
The last two/three? are generic library goals.
Time Machine is a port of Noda Time; use it for all your .NET needs.
Current TZDB Version: 2022a
Example Code:
// Sets up timezone and culture informationawaitTimeMachine.initialize();
print('Hello, ${DateTimeZone.local} from the Dart Time Machine!\n');
var tzdb = awaitDateTimeZoneProviders.tzdb;
var paris = await tzdb["Europe/Paris"];
var now = Instant.now();
print('Basic');
print('UTC Time: $now');
print('Local Time: ${now.inLocalZone()}');
print('Paris Time: ${now.inZone(paris)}\n');
print('Formatted');
print('UTC Time: ${now.toString('dddd yyyy-MM-dd HH:mm')}');
print('Local Time: ${now.inLocalZone().toString('dddd yyyy-MM-dd HH:mm')}\n');
var french = awaitCultures.getCulture('fr-FR');
print('Formatted and French ($french)');
print('UTC Time: ${now.toString('dddd yyyy-MM-dd HH:mm', french)}');
print('Local Time: ${now.inLocalZone().toString('dddd yyyy-MM-dd HH:mm', french)}\n');
print('Parse French Formatted ZonedDateTime');
// without the 'z' parsing will be forced to interpret the timezone as UTCvar localText = now
.inLocalZone()
.toString('dddd yyyy-MM-dd HH:mm z', french);
var localClone = ZonedDateTimePattern
.createWithCulture('dddd yyyy-MM-dd HH:mm z', french)
.parse(localText);
print(localClone.value);
VM
Flutter
Web (Dart2JS and DDC)
All unit tests pass on DartVM and DartWeb (just Chrome at this time).
Tests have been run on preview versions of Dart2,
but the focus is on DartStable, and they are not run before every pub publish.
The public API is stabilizing -- mostly focusing on taking C# idiomatic code
and making it Dart idiomatic code, so I wouldn't expect any over zealous changes.
This is a preview release -- but, I'd feel comfortable using it. (Author Stamp of Approval!)
Documentation was ported, but some things changed for Dart and the documentation is being slowly updated (and we need
an additional automated formatting pass).
Don't use any functions annotated with @internal. As of v0.3 you should not find any, but if you do, let me know.
Todo (before v1):
[x] Port Noda Time
[x] Unit tests passing in DartVM
[ ] Dartification of the API
[X] First pass style updates
[X] Second pass ergonomics updates
[X] Synchronous TZDB timezone provider
[ ] Review all I/O and associated classes and their structure
[ ] Simplify the API and make the best use of named constructors
[X] Non-Gregorian/Julian calendar systems
[X] Text formatting and Parsing
[X] Remove XML tags from documentation and format them for pub (human second pass still needed)
[X] Implement Dart4Web features
[X] Unit tests passing in DartWeb
[ ] Fix DartDoc Formatting
[ ] Create simple website with examples (at minimal a good set of examples under the examples directory)
External data: Timezones (TZDB via Noda Time) and Culture (ICU via BCL) are produced by a C# tool that is not
included in this repository. The goal is to port all this functionality to Dart, the initial tool was created for
bootstrapping -- and guaranteeing that our data is exactly the same thing that Noda Time would see (to ease porting).
Future Todo:
[ ] Produce our own TSDB files
[ ] Produce our own Culture files
[ ] Benchmarking & Optimizing Library for Dart
Flutter Specific Notes
You'll need this entry in your pubspec.yaml.
# The following section is specific to Flutter.flutter:assets:-packages/time_machine/data/cultures/cultures.bin-packages/time_machine/data/tzdb/tzdb.bin
Once flutter gets Isolate.resolvePackageUri functionality,
we'll be able to merge VM and the Flutter code paths and no asset entry and no special import will be required.
It would look just like the VM example.
Or with: https://pub.dartlang.org/packages/flutter_native_timezone
import'package:flutter/services.dart';
// you can get Timezone information directly from the native interface with flutter_native_timezoneawaitTimeMachine.initialize({
'rootBundle': rootBundle,
'timeZone': awaitTimezone.getLocalTimezone(),
});
DDC Specific Notes
toString on many of the classes will not propagate patternText and culture parameters.
Instant and ZonedDateTime currently have toStringDDC functions available to remedy this.
We learned in Issue:33876 that dynamic code uses a different flow path.
Wrapping your code as dynamic will allow toString() to work normally. It will unfortunately ruin your intellisense.
See Issue:33876 for more information. The fix
exists, now we just wait for it to hit a live build.
toStringDDC instead of toStringFormatted to attempt to get a negative
contagion coefficient. If you are writing on DartStable today
and you need some extra string support because of this bug, let me know.
Update: Dart 2.0 stable did not launch with the fix. Stable release windows are 6 weeks.
Hopefully we get the fix in the next release (second half of September).