branch: elpa/datetime
commit 30bc4823bcb5ffad5ca4228e41ab8a29d5d5400b
Author: Paul Pogonyshev <[email protected]>
Commit: Paul Pogonyshev <[email protected]>
Expand documentation somewhat to include list of Java pattern elements and
some examples.
---
README.adoc | 118 ++++++++++++++++++++++++++++++++++++++++++++++++------------
1 file changed, 96 insertions(+), 22 deletions(-)
diff --git a/README.adoc b/README.adoc
index e564a22fd1..f10d14d50a 100644
--- a/README.adoc
+++ b/README.adoc
@@ -21,14 +21,14 @@
image:http://stable.melpa.org/packages/datetime-badge.svg[MELPA Stable, link=htt
image:https://github.com/doublep/datetime/workflows/CI/badge.svg[CI,
link=https://github.com/doublep/datetime/actions?query=workflow%3ACI]
-# datetime
+= datetime
Datetime is a library for parsing, formatting, matching and recoding
timestamps and date-time format strings. Not all of the planned
functionality is implemented yet.
-## System locale and timezone
+== System locale and timezone
The library will try to guess your system locale and timezone, but
this is frustratingly difficult. In particular, on MS Windows it will
@@ -49,7 +49,23 @@ following forms:
....
-## Pattern types
+== Overall goals
+
+This library is targeted at bulk-processing, therefore many functions
+are optimized for speed, but not necessarily for ease of use. For
+example, <<#formatting,formatting>> is done in two steps: first you
+need to generate a formatting function for given pattern, and only
+using it obtain formatted strings.
+
+The initial and primary user of the library is {uri-logview}[Logview],
+where it is used to quickly <<#matching,match>> thousands of
+timestamps (usually one per line) in a log file, so speed was very
+important from the start. Later it also started using datetime’s
+<<#parsing,parsing>> functionality in a similar way — meaning that
+speed was important there too.
+
+
+== Pattern types
There exist several different ways to specify date and/or time format.
Different programming languages and their libraries use different
@@ -64,25 +80,83 @@ This library currently uses Java pattern format everywhere,
but is
internally written in such a way that support for other types can be
added relatively easily — when someone needs them.
-
-## Overall goals
-
-This library is targeted at bulk-processing, therefore many functions
-are optimized for speed, but not necessarily for ease of use. For
-example, <<#formatting,formatting>> is done in two steps: first you
-need to generate a formatting function for given pattern, and only
-using it obtain formatted strings.
-
-The initial and primary user of the library is {uri-logview}[Logview],
-where it is used to quickly <<#matching,match>> thousands of
-timestamps (usually one per line) in a log file, so speed was very
-important from the start. Later it also started using datetime’s
-<<#parsing,parsing>> functionality in a similar way — meaning that
-speed was important there too.
+=== Supported Java pattern elements
+
+Java {uri-java-datetimeformatter}[date-time patterns] are very
+versatile and support a lot of features. This library doesn’t
+implement — at least currently — every element, but does support all
+the most imporant ones. In particular, everything (with the exception
+of timezone names) needed by patterns returned from the three
+`datetime-locale-*-pattern` functions is supported in all other parts
+of the library. Timezone names are currently supported when
+<<#formatting,formatting>> only.
+
+Here is an overview of Java date-time pattern elements together with
+their support in datetime library:
+
+[%autowidth]
+|===
+^| Symbol | Meaning ^| Support in the library
+
+^| G | era (AD/BC) ^| full
+^| u | year ^| none
+^| y | year of era ^| full
+^| Y | week-based year ^| full
+^| Q/q | quarter of year ^| none
+^| M/L | month of year ^| full
+^| w | week of week-based year ^| full
+^| W | week of month ^| full
+^| D | day of year ^| full
+^| d | day of month ^| full
+^| g | modified julian day ^| none
+^| E | day of week ^| full
+^| e/c | localized day of week ^| full
+^| F | day-of-week in month ^| full
+^| a | AM/PM ^| full
+^| B | period of day ^| full
+^| H | hour of day (0-23) ^| full
+^| k | hour of day (1-24) ^| full
+^| h | hour in AM/PM (1-12) ^| full
+^| K | hour in AM/PM (0-11) ^| full
+^| m | minute of hour ^| full
+^| s | second of minute ^| full
+^| S | fraction of second ^| full
+^| A | millisecond of day ^| none
+^| n | nanosecond of second ^| none
+^| V | timezone id ^| none
+^| v | generic timezone name ^| none
+^| z | timezone name ^| only formatting
+^| Z | timezone z-offset ^| full
+^| x | timezone x-offset ^| full
+^| X | timezone x-offset or 'Z' for zero ^| full
+^| O | localized timezone offset ^| full
+^| p | pad modifier ^| none
+^| ' | quoting for literal text ^| full
+^| [/] | optional section ^| none
+|===
+
+Some examples of commonly used patterns:
+
+[%autowidth]
+|===
+| Pattern | Example timestamp | Notes
+
+| `yyyy-MM-dd HH:mm:ss` | 2023-09-18 21:29:02 |
+| `yyyy-MM-dd HH:mm:ss.SSS` | 2023-09-18 21:29:02.618 |
+| `yyyy-MM-dd\'T\'HH:mm:ssZ` | 2023-09-18T21:29:02+0200 |
+| `yyyy-MM-dd HH:mm:ssXXX` | 2023-09-18 21:29:02+02:00 |
+| `yyyy-MM-dd HH:mm:ssx` | 2023-09-18 21:29:02+02 |
+| `yyyy-MM-dd HH:mm:ss O` | 2023-09-18 21:29:02 GMT+2 |
+| `yyyy-MM-dd HH:mm:ss z` | 2023-09-18 21:29:02 CEST | only formatting
supported
+| `EEE MMM dd HH:mm:ss yyyy` | Mon Sep 18 21:29:02 2023 |
+| `dd.MM.yyyy` | 18.09.2023 |
+| `MMM d, yyyy` | Sep 18, 2023 |
+| `h:mm:ss a` | 9:29:02 PM |
+|===
[#parsing]
-## Parsing timestamps
+== Parsing timestamps
Parsing timestamps using the library is a two-step operation. First
you create a _parser function_ for a specific pattern and options.
@@ -117,7 +191,7 @@ E.g. “20:00:00+01” is parseable (for example, with pattern
[#formatting]
-## Formatting timestamps
+== Formatting timestamps
To format timestamps you first need to create a _formatter function_.
This function accepts one argument — the timestamp as a floating point
@@ -159,7 +233,7 @@ abbreviated of full names and offsets to GMT. For example:
[#matching]
-## Matching timestamps
+== Matching timestamps
Sometimes you need to determine if given string is (likely) a
timestamp, corresponding to given pattern. A robust way, of course,
@@ -180,7 +254,7 @@ Timezone support in matching is currently the same as for
<<#parsing,parsing>>.
-## Other functions
+== Other functions
These functions are also part of the library interface. They are
documented within Emacs.