Commit Graph

335 Commits

Author SHA1 Message Date
Kang Seonghoon 582f1166f2
Documentation and complete rewrite for `NaiveDateTime` operations.
- `NaiveDateTime` is now almost completely annotated with examples.

- Introduced `NaiveTime::overflowing_{add,sub}` for the correct
  handling of overflow/underflow of `NaiveTime`.

- `NaiveDateTime +/- Duration` operation is rewritten with those
  methods, eliminating any problem against leap seconds. (Thus this
  is yet another slight breaking change, but considered a bug fix.)
2016-08-17 00:41:08 +09:00
David Tolnay c3b9a26bb0 Support deserializing from bincode
Bincode is a minimal format that expects the Deserialize
implementation to tell it what type of data it should
expect to see.
2016-08-16 02:54:14 -04:00
Kang Seonghoon 8b382fca45
Incremental doc updates for `NaiveDateTime`.
Also moved the leap second arithmetic examples to
`chrono::naive::time`, as it became hard to link from other pages.
2016-08-16 02:15:56 +09:00
Kang Seonghoon 0393cae36d Standardized the doc example format for shortened methods.
Especially for naives types, methods can be too long to fit in
one line. Previously ad-hoc closures have been used for extreme
cases; this commit will update them to the following form:

    use anything::needs::to::be::imported;

    let shortened = SomeType::long_name_to_be_shortened;

    assert_eq!(shortened(...), ...);

It should be noted that the shortened name is no longer arbitrary;
it should be either the original method name, or when it gets too
long, a name with adjectives and clauses removed. The abbreviation
is now consistent, and restricted to the following:

- `num_days` -> `ndays`; `num_secs` -> `nsecs`
- `hms_milli` -> `hmsm`; - `hms_micro` -> `hmsu`; `hms_nano` -> `hmsn`

The goal is to make examples NOT look alike tests, and more alike
the actual code. (Well, not always possible but I'm trying.)
2016-08-08 03:34:00 +09:00
Kang Seonghoon 62d289fc85 Added documentations for `NaiveTime` and `NaiveDateTime` methods.
Also slightly edited the `format` and `format_with_items` docs to be
more unobstructive (i.e. implicit `use` from previous blocks).
2016-08-08 03:04:39 +09:00
Kang Seonghoon 69d7a86c1c Subtraction fixes for NaiveTime.
Again, this time with more thorough tests and documentation.
2016-08-07 02:32:09 +09:00
Kang Seonghoon d50546a592 More documentation for NaiveTime, and addition fixes.
While writing documentation tests for NaiveTime it was found that
the addition involving leap seconds is *still* slightly broken.
(A consequence of having less tests, well.) The addition routine
has been rewritten to be explicit about leap seconds while passing
all other tests, so the rewrite does not change the intention.
2016-08-06 19:32:01 +09:00
Kang Seonghoon cb9fd7fbe1 0.2.25: Fixed warnings from 0.2.24. Duh. 2016-08-04 03:44:31 +09:00
Kang Seonghoon 603ac1bc1c 0.2.24: Serialization updates.
- Serde 0.8 is now supported. (#86)

- The deserialization implementation for rustc-serialize now properly
  verifies the input. Also tons of tests have been added. (#42)
2016-08-04 03:37:33 +09:00
Kang Seonghoon ad6253f653 Proper (de)serialization format handling.
For a while Chrono's serialization support was barely working,
i.e. usable but never been safe. While it wouldn't cause any memory
unsafety, attacker can fabricate an input that will make most users
confused (e.g. seemingly same Date which doesn't compare equally).
This commit will properly error for those cases.

It was also problematic that the generated rustc-serialize format is
very inefficient, especially for JSON. Due to the backward
compatibillity this commit does NOT fix them (likely to be in 0.3),
but this does try to define the exact format and define tons of
tests to detect any change to the serialization.

There are several remaining problems in the serialization format;
the serde implementation seems good, but it is unable to distinguish
some cases of leap seconds (practically won't matter, but still).
The rustc-serialize implementation would require a massive redesign.
For now, I postpone those issues to 0.3 (what a convenient excuse).

Fixes #42.
2016-08-04 03:22:12 +09:00
Kang Seonghoon d4d2ebb249 Merge pull request #86 from alexbool/serde-0.8
Update serde
2016-08-03 11:11:35 +09:00
Alexander Bulaev 8c438c5e2a Allow serde 0.8 2016-08-02 20:32:57 +03:00
Kang Seonghoon ae9be4a6f3 0.2.23: Documentation and minor bug fixes.
- Tons of documentation updates! (#77, #78, #80, #82 and my own
  changes as well)

- `DateTime::timestamp_subsec_{millis,micros,nanos}` methods have
  been added. (#81)

- When the system time records a leap second,
  the nanosecond component was mistakenly reset to zero. (#84)

- `Local` offset misbehaves in Windows for August and later,
  due to the long-standing libtime bug (dates back to mid-2015).
  Workaround has been implemented. (#85)
2016-08-03 01:18:33 +09:00
Kang Seonghoon 5f8c6e611a Workaround for rust-lang-deprecated/time#137.
In Windows libtime populate `time::Tm` from `SYSTEMTIME`, which
unfortunately does not contain `tm_yday`. It tries to calculate it
from other fields, but... as one can say it is completely wrong.
Since other fields are copied in verbatim we work around this
problem by using a less efficient method.

Fixes #85.
2016-08-03 00:38:08 +09:00
Kang Seonghoon 00858c6363 More cross-references. 2016-08-02 20:52:45 +09:00
Kang Seonghoon 4475ee5a48 More cross links and detailed examples for docs.
Also fixed some broken links (hard to catch from source files).
2016-08-01 03:23:46 +09:00
Kang Seonghoon 932e29aa94 Better documentation and cross-references for naive types. 2016-08-01 01:02:32 +09:00
Kang Seonghoon 28b33eddca Merge pull request #84 from sergey-v-galtsev/master
Fix spilling of exceeding `tm_sec` into `tm_nsec` in `tm_to_datetime()`.
2016-07-31 07:24:54 +09:00
Sergey V. Galtsev a5be5cc592 Fix spilling of exceeding `tm_sec` into `tm_nsec` in `tm_to_datetime()`. 2016-07-31 00:42:11 +03:00
Kang Seonghoon f41de9b41f Documentation cleanup.
- The main documentation (`src/lib.rs` AND `README.md`) now properly
  link to other types when rendered.

- The role of `TimeZone` trait is explained more thoroughly.

(Hopefully) fixes #82.
2016-07-26 03:48:08 +09:00
Kang Seonghoon 0b3218289f Fixed warnings from rust-lang/rfcs#1445. 2016-07-26 03:48:05 +09:00
Ben Eills bb50154d8c Add functions to get milli/micro/nano-seconds from a DateTime (#81)
* Add functions to get milli/micro/nano-seconds from a DateTime

Using the underlying naive::NaiveTime fractional part, we compute
the number of milli/micro/nano-seconds since the last second boundary.

The reason for not computing elapsed time since 1970 is because we
would hit potential issues of i64s not being large enough (the range
would be strictly smaller than the 64bit-timestamp range, causing
compatibility issues).

* Rename subsecond functions

Renamed accessors to subsec_{nano,micro,milli}, as suggested
in pull request comment.  Also added warnings for leap second
consitions causing these values to exceed the normal range
of 0..10^n.

Fixed editor's previous obnoxious whitespace changes.
2016-07-16 14:19:34 +09:00
Kang Seonghoon 72c3dff17d Merge pull request #80 from dwillie/master
Clarify serde support inclusion in readme.md
2016-06-23 00:45:08 +09:00
David Willie c631ba3767 Clarify serde support inclusion in readme.md 2016-06-22 14:51:18 +10:00
Kang Seonghoon 7bfb92711d Merge pull request #78 from JohnHeitmann/patch-2
Minor DateTime intro doc update
2016-06-15 01:59:59 +09:00
Kang Seonghoon e4564fe49f Merge pull request #77 from JohnHeitmann/patch-1
Clean up Duration intro doc
2016-06-15 01:59:50 +09:00
John Heitmann 531aa752b3 Minor DateTime intro doc update
• Put timezone in the lede since it's critical.
• Mention Instant and SystemTime to put DateTime in context
2016-06-13 21:20:21 -07:00
John Heitmann dce4ddf592 Clean up Duration intro doc
• Make what Duration is the first thing mentioned instead of project history.
• Add "magnitude" to the description to disambiguate it from Interval (in the Joda sense).
• Brush up some awkward language.
• Add a doc link and illustrate the module namespace.
2016-06-13 21:03:52 -07:00
Kang Seonghoon 8efc85ce9f 0.2.22: Fixes on `%.6f` and `%.9f` on whole seconds.
- `%.6f` and `%.9f` used to print only three digits
  when the nanosecond part is zero. (#71)

- The documentation for `%+` has been updated
  to reflect the current status. (#71)
2016-04-22 08:54:57 +09:00
Kang Seonghoon 66d5856354 Fixed `%.[369]f` on the whole seconds and misleading docs.
Fixes #71.
2016-04-22 00:47:01 +09:00
Kang Seonghoon d869643a33 0.2.21: a slight bug fix.
- `Fixed::LongWeekdayName` was unable to recognize `"sunday"`. (#66)
- Slight documentation addition. (#65)
2016-03-29 09:00:49 +09:00
Kang Seonghoon ada7aeda72 Merge pull request #66 from jwilm/fix-parse-rfc-850
Fix parsing LongWeekday when day is Sunday
2016-03-29 03:02:59 +09:00
Joe Wilm 097ab04a69 Update RFC850 test to check all weekdays 2016-03-28 09:57:29 -07:00
Joe Wilm 33516cc9f1 Fix parsing LongWeekday for Sunday
Only `Sun` was consumed, and the string being parsed would have `day`
left over at the front.
2016-03-28 09:46:25 -07:00
Joe Wilm 260342a592 Add regression test for RFC850 parsing
Although not supported directly by chrono, users should be able to
specify the RFC850 format and expect it to parse properly. RFC850 is
important since HTTP/1.1 specifies

    HTTP-date = rfc1123-date | rfc850-date | asctime-date
2016-03-28 09:43:52 -07:00
Kang Seonghoon a2debbdcec Merge pull request #65 from dbrgn/docs-improvement
Clarify timezone conversion in docs
2016-03-24 02:22:12 +09:00
Danilo Bargen 6d9f91874b Clarify timezone conversion in docs 2016-03-23 09:50:23 +01:00
Kang Seonghoon 79686de2d1 Fixed a broken test in 1.7 (missed by the local testing). 2016-03-06 00:32:21 +09:00
Kang Seonghoon 530a5ee10b 0.2.20: Updated `serde` dependency. (#63, #64) 2016-03-06 00:19:29 +09:00
Kang Seonghoon daf7a08ad3 Merge pull request #63 from Ryanl92/master
Update serde to 0.7.0
2016-03-04 02:21:21 +09:00
Ryan Lewis f8630fce81 Update serde to 0.7.0
rename visit_str to serialize_str
rename E::syntax(&str) to E::Custom(String)
rename deserializer.visit to deserialize.deserialize
2016-03-03 20:54:47 +13:00
Kang Seonghoon aa6df02436 0.2.19: `DateTime::date` (and indirectly, `Local::today`) fix. (#61) 2016-02-05 01:35:43 +09:00
Kang Seonghoon 4025d617f5 Fixed #61.
Technically it was a problem of `DateTime::date` with a lax test.
Documented the intention and guarantees on `Date` as a result.
2016-02-05 01:23:46 +09:00
Kang Seonghoon 08da04cc37 Merge pull request #59 from kud1ing/patch-1
"time" is now "https://github.com/rust-lang-deprecated/time"
2016-01-29 11:23:20 +09:00
kud1ing 458f09270d "time" is now "https://github.com/rust-lang-deprecated/time" 2016-01-28 08:14:03 +01:00
Kang Seonghoon d789e3e493 0.2.18: Get rid of a superfluous `rand` dependency. (#57) 2016-01-23 14:41:12 +09:00
Kang Seonghoon d3384780d0 rustfmt'ed src/lib.rs (only). 2016-01-23 14:37:29 +09:00
Kang Seonghoon 1f7fd95020 Merge pull request #57 from dten/patch-1
Don't depend on num's default features; removing rand requirement
2016-01-11 02:22:35 +09:00
David Hewson 89ec5c45cd Don't depend on num's default features; removing rand requirement for build
requirement for rand comes from `num`'s default features which are all unused in `chrono`
not including the default features means that that `build` no longer requires `rand` (and hence does not pass it on to others importing `chrono`)
I thought it should also remove it for `test` / `bench` also but the `serde_json` dev-dependency seems to make it included..
2016-01-09 17:29:15 +00:00
Kang Seonghoon 2c11364410 0.2.17: Added a serde support for date and time types. (#51) 2015-11-22 03:27:08 +09:00