Code Monkey home page Code Monkey logo

epoch.net's Introduction


GitHub Workflow Status (with event) Nuget Nuget (with prereleases)


๐Ÿ‘‹ Introduction

A simple and non-intrusive library for all your epoch needs

using Epoch.net;

...
var timestamp = EpochTime.Now;
...

๐Ÿค” What is an Epoch

Epoch is shorthand for Unix epoch time or as it is also known POSIX time.

Short version: The number of seconds since 1970-01-01T00:00:00Z without leap seconds.

Long version: unix time

Motivation

With .net core working on all major operating systems and most of them using POSIX to denote time and timestamps. Not to mention the myriad of 3rd party tools, using POSIX time internally. The need for a working and tested implementation became clearer and clearer. Additionally I did not want to write this logic in an inferior form in many of my applications. So this little library was written.

Its sole purpose is to make the work with these unix timestamps as easy as possible.

For this purpose this library contains extension methods that build upon the existing DateTime, TimeSpan, int and long types.

๐Ÿ“– Glossary

Term Description
EpochTime Represents a POSIX time instance exact to the second
EpochTimestamp The number of seconds since 1970-01-01T00:00Z
LongEpochTime Represents a POSIX time instance exact to the millisecond
LongEpochTimestamp The number of milliseconds since 1970-01-01T00:00Z

Difference between EpochTime and LongEpochTime

The initial difference was precision. EpochTime will only be accurate to the nearest second on the other hand LongEpochTime is accurate to the millisecond. From this precision difference I decided to differentiate then by their underlying base type.

EpochTime is based on int32 / int

LongEpochTime is based on int64 / long

โ—This is sadly implies that if you get a POSIX timestamp from somewhere you, the developer, have to know if it is representing milliseconds or seconds!

Ranges

Unit Min value Max value
EpochTimestamp -2147483648 2147483647
LongEpochTimestamp -922337203685477 922337203685477

๐Ÿ“ Note: The range of the LongEpoch is theoretically limited only by the range of int64.

โœ… Features

  • EpochTime a second precise POSIX time wrapper
  • LongEpochTime a millisecond precise POSIX time wrapper
  • Extension methods for build in time handling classes:
    • DateTime
    • TimeSpan
    • DateOnly
    • TimeOnly
  • Fully tested ;)

๐Ÿƒโ€โ™‚๏ธ Quick start

Add the package to yor project

The preferred way of integrating the library is to use the nuget package. This is easily done be either:

dotnet add package Epoch.net

or

Install-Package Epoch.net

Reference

After the package is added to the project add the using directive:

...
using Epoch.net;
...

Done ๐ŸŽ‰

๐Ÿฆฎ Helping out

Everyone can help in their own way.

Here are just some ideas:

  • Create a ticket with a improvement suggestion
  • Create a ticket with a bug or issue you may be having
  • Create a ticket with a question that you may be having
  • Have a look at the code and suggest improvements
  • Spread the word of its existence
  • And for the hardcore among you you can help me with the documentation ๐Ÿ˜ˆ

๐Ÿ”— Links

โญ๏ธ Next steps

  • Consult the Wiki
  • Create a ticket to help the project improve

epoch.net's People

Contributors

dejanfajfar avatar redspidermkv avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

epoch.net's Issues

ToRawEpoch method causes integer overflow for distant future dates

Certain DateTime dates given to DateTimeExtensions.ToRawEpoch cause integer overflow when converting the TimeSpan.TotalSeconds to an integer.

You'll experience this if you write a unit test with new DateTime(2099, 7, 4, 0, 0, 0). You'll get an output of -2147483648. (The value of TotalSeconds is 4086806400).

Unintended namespace issues

When using epoch.net via nuget, the actual usage differs because the compiler gets confused as to the name Epoch being a namespace or a class.

At the top:
image

image

After fixing the compilation error:

image

The incantation of Epoch.net.Epoch is a little verbose due to this namespace and class name clash.

Support double

When working with the DateTime class and with JSON Web Tokens, the specification calls for the Unix Epoch to be a double. It would ease use of this nuget package if the API support double for seconds.

Introduce a more accurate timestamp format

The standard unix timestamp is OK but limited. With its accuracy limitation on seconds this does not provide the accuracy necessary.

For this we should extend the epoch with millisecond.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.