{"id":410474,"date":"2024-06-29T21:25:10","date_gmt":"2024-06-29T21:25:10","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=410474"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=410474","title":{"rendered":"<span>\u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u0432\u0441\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b: \u0440\u0430\u0437\u0431\u043e\u0440 \u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0435\u0435\u0440\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0430\u043b\u0430<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/cc\/vu\/xt\/ccvuxttktlmr2fuq4njrtradyow.png\" data-src=\"https:\/\/habrastorage.org\/webt\/cc\/vu\/xt\/ccvuxttktlmr2fuq4njrtradyow.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u044d\u0442\u043e <a href=\"https:\/\/habr.com\/ru\/users\/psyhaste\/\" class=\"user_link\">PsyHaSTe<\/a> \u0438 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0443\u0434\u0430 \u043c\u0435\u043d\u044f \u0437\u0430\u043d\u0435\u0441\u043b\u0430 \u043d\u0435\u043b\u0435\u0433\u043a\u0430\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043a\u043e\u0434\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0430 <a href=\"https:\/\/habr.com\/ru\/users\/novar\/\" class=\"user_link\">novar<\/a> (\u043a\u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b \u2014 <a href=\"https:\/\/habr.com\/ru\/post\/571342\/\">\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f<\/a>). \u041a\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0431\u044b\u043b\u0438 \u0443 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f? \u041f\u043e\u0447\u0435\u043c\u0443 \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443 \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0438 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435? \u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441 \u044d\u0442\u0438\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c? \u041e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u044d\u0442\u0438 \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043b\u0438\u043d\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f \u0438 \u0432\u044b\u043b\u0438\u043b\u0438\u0441\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u044e \u0441 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u043c \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c, \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0438 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0437\u0430\u0434\u0430\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043a\u0442\u043e \u0432 \u0437\u0434\u0440\u0430\u0432\u043e\u043c \u0443\u043c\u0435 \u043c\u043e\u0433 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0441\u043e\u0447\u0435\u0442\u0430\u044e\u0449\u0438\u0439 \u043c\u043e\u043d\u0430\u0434\u044b \u0441 goto, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b \u043e\u0431\u044a\u0435\u043c \u043a\u043e\u0434\u0430 \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b \u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0442\u043e \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442. \u0418, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0441\u0430\u043c\u043e\u0435 \u0432\u043a\u0443\u0441\u043d\u043e\u0435, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0435 \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0440\u0430\u0431\u043e\u0442\u044b JIT \u2014 \u0432 \u043a\u043e\u043d\u0446\u0435. \u0418\u0442\u043e\u0433\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435 <a href=\"https:\/\/github.com\/Pzixel\/TestApp\" rel=\"nofollow noopener noreferrer\">\u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u0430\u0434\u0430\u0447\u0438. \u0422.\u043a. \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043e\u043d\u0430 \u0437\u0432\u0443\u0447\u0438\u0442 \u043a\u0430\u043a &#171;\u0441\u0434\u0435\u043b\u0430\u0439 \u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u044e \u0447\u0442\u043e, \u0441\u043c. \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0435&#187; \u0442\u043e \u0434\u0430\u043c \u043a\u0440\u0430\u0442\u043a\u0443\u044e \u0432\u044b\u0436\u0438\u043c\u043a\u0443 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044f:<\/p>\n<p>  <\/p>\n<blockquote><p>\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e. \u0420\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u043e \u0432 \u0441\u0442\u0438\u043b\u0435 crontab (\u0442\u043e\u0447\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0441\u043c. \u0432\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0438), \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0435 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0438\u043b\u0438 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0432 \u044d\u0442\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435. \u041e\u0431\u0440\u0430\u0449\u0430\u044e \u0412\u0430\u0448\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043a\u043b\u0430\u0441\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0434\u0430\u0436\u0435 \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0437\u0430\u0434\u0430\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441 \u0448\u0430\u0433\u043e\u043c \u0432 \u043e\u0434\u043d\u0443 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0443.<\/p><\/blockquote>\n<p>\u041a\u043b\u0430\u0441\u0441 (\u0431\u0435\u0437 \u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440\u043e\u0432\u044b\u0445 XML \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u043e\u0432) \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">public class Schedule {   public Schedule() : this(\"*.*.* * *:*:*.*\")   {   }    public Schedule(string scheduleString)  { }    public DateTime NearestEvent(DateTime t1) { }   public DateTime NearestPrevEvent(DateTime t1) { }   public DateTime NextEvent(DateTime t1) { }   public DateTime PrevEvent(DateTime t1) { } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0436\u0430\u043b\u0443\u0439, \u043d\u0430\u0447\u043d\u0435\u043c \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0430 \u043f\u043e\u0442\u043e\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0438\u0437 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u043c\u044b \u0442\u0443\u0442 \u0432\u0438\u0434\u0438\u043c? \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043e\u0442\u0434\u0435\u043b\u0435\u043d \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u042d\u0442\u043e \u043d\u0430\u0441 \u0434\u043e\u043b\u0436\u043d\u043e \u043d\u0430\u0432\u0435\u0441\u0442\u0438 \u043d\u0430 \u043c\u044b\u0441\u043b\u044c, \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0435 \u0442\u0430\u043a \u0447\u0430\u0441\u0442\u043e, \u0442.\u043a. \u043d\u0430\u043c \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u0441 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c. \u041e\u0442\u043a\u0443\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 (\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c) \u0434\u043e\u043b\u0436\u043d\u044b \u043a\u0430\u0441\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u0433\u043e \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u0435\u0441\u0442\u0430 \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432 (\u043d\u043e \u043d\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430). \u041f\u043e\u0447\u0435\u043c\u0443? \u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0434\u0430\u043d \u043a\u043b\u0430\u0441\u0441 <code>Schedule<\/code>, \u0430 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u0442\u0440\u0430\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0442\u0438\u043f\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043d\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 GC \u2014 \u043b\u043e\u0433\u0438\u0447\u043d\u0435\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443. \u041d\u0443 \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c, \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0437\u0434\u0440\u0430\u0432\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0447\u0442\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0435 \u0442\u0430\u043a \u0447\u0430\u0441\u0442\u043e, \u043a\u0430\u043a \u043f\u043e \u043d\u0438\u043c \u0438\u0449\u0443\u0442 (\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u043e\u0433\u043e \u0436\u0435 \u043a\u0440\u043e\u043d\u0430, \u0444\u043e\u0440\u043c\u0430\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c). \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0434\u043a\u043e.<\/p>\n<p>  <\/p>\n<p>\u0421 \u044d\u0442\u0438\u043c \u0440\u0435\u0448\u0438\u043b\u0438. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044f. &#171;\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u0439&#187; \u043c\u044b \u043e\u0442\u043c\u0435\u0442\u0430\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0438\u0437-\u0437\u0430 \u0440\u0435\u043c\u0430\u0440\u043a\u0438 \u043f\u0440\u043e 1\u043c\u0441 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u2014 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434 \u0441 2000 \u043f\u043e 2100 \u0433\u043e\u0434 (\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0434\u0430\u0442 \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044f), \u044d\u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043e\u0444\u0438\u0433\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0432\u043e\u043e\u0440\u0443\u0436\u0438\u0432\u0448\u0438\u0441\u044c \u0433\u0443\u0433\u043b\u043e\u043c, \u0438\u0434\u0435\u043c \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 &#171;\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0431\u044f\u0442\u0430&#187;. \u042f \u043b\u0438\u0447\u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0441\u044f \u0441 \u0434\u0432\u0443\u043c\u044f \u0444\u0430\u0439\u043b\u0430\u043c\u0438: \u0444\u0430\u0439\u043b\u0430\u043c\u0438 <a href=\"https:\/\/github.com\/systemd-cron\/crontab\/blob\/b9b3396b4db8fc0e3c3626b724184bcde5c4c830\/cron.c\" rel=\"nofollow noopener noreferrer\">\u0441\u0430\u043c\u043e\u0433\u043e \u043a\u0440\u043e\u043d\u0430<\/a> \u0438 <a href=\"https:\/\/github.com\/quartznet\/quartznet\/blob\/main\/src\/Quartz\/CronExpression.cs#L278\" rel=\"nofollow noopener noreferrer\">\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 Quartz<\/a>. \u041e\u0442\u043a\u0443\u0434\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u043c, \u0447\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u0440\u0430\u0437\u0443\u043c\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043b\u0438 \u043d\u0430\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 (\u0433\u043e\u0434, \u0434\u0435\u043d\u044c, &#8230;) \u0438\u043b\u0438 \u043d\u0435\u0442. \u0412\u043e\u043e\u0440\u0443\u0436\u0438\u0432\u0448\u0438\u0441\u044c \u043c\u0430\u0433\u0438\u0435\u0439 \u041e\u041e\u041f \u0431\u0435\u0440\u0435\u043c \u0438 \u0437\u0430 2 \u043c\u0438\u043d\u0443\u0442\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">public readonly struct ScheduleInterval {   public int Begin { get; }   public int End { get; }    private readonly bool[] _allowedPoints;    public ScheduleInterval(int begin, int end)   {     Begin = begin;     End = end;     _allowedPoints = new bool[end - begin + 1];   }    public bool IsPointAllowed(int point) =>      _allowedPoints[point - Begin];   public bool ChangePointAllowance(int point, bool value) =>      _allowedPoints[point - Begin] = value;    \/\/ \u043f\u0430\u0440\u0430 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043e\u043f\u0443\u0449\u0435\u043d\u0430 }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c. \u041d\u043e \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u0443 \u043d\u0430\u0441 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0441\u0442\u0440\u043e\u043a\u0430. \u041a\u0430\u043a \u043d\u0430\u043c \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0435? \u041d\u0443, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u043f\u043e \u043f\u0443\u043d\u043a\u0442\u0430\u043c:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041f\u0438\u0441\u0430\u0442\u044c \u0440\u0430\u0437\u0431\u043e\u0440 \u0440\u0443\u043a\u0430\u043c\u0438 \u2014 \u0434\u043e\u043b\u0433\u043e, \u043c\u0443\u0442\u043e\u0440\u043d\u043e, \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u043e \u043e\u0448\u0438\u0431\u043a\u0430\u043c. \u0410 \u0435\u0449\u0451 \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043b\u0433\u043e. \u0418\u0437 \u043f\u043b\u044e\u0441\u043e\u0432 \u2014 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0436\u0430\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0435\u0440\u0444\u043e\u0440\u043c\u0430\u043d\u0441, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c (\u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f \u0431\u0435\u043a\u0442\u0440\u0435\u043a\u0438\u043d\u0433\u0430, \u0445\u043e\u0440\u043e\u0448\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e). \u041d\u043e, \u043c\u044b \u043d\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u0438\u0448\u0435\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043b\u044e\u0441\u044b \u043d\u0430\u043c \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u044b (\u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u044f, \u0447\u0442\u043e \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435), \u0430 \u0432\u043e\u0442 \u043c\u0438\u043d\u0443\u0441\u044b \u043e\u0447\u0435\u043d\u044c \u0436\u0435\u0441\u0442\u043a\u0438\u0435. \u0422\u0435\u043c \u0431\u043e\u043b\u0435\u0435, \u0447\u0442\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043c\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u2014 \u043d\u0435\u0442<\/li>\n<li>\u041f\u0438\u0441\u0430\u0442\u044c \u0440\u0430\u0437\u0431\u043e\u0440 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0430\u043c\u0438 \u2014 \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0432\u0441\u0435 \u043d\u044e\u0430\u043d\u0441\u044b \u0444\u043e\u0440\u043c\u0430\u0442\u0430, \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u043e\u0439 \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0435\u0451 \u0437\u0430\u043c\u0443\u0447\u0430\u0435\u0448\u044c\u0441\u044f. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0440\u0435\u0443\u0433\u043b\u044f\u0440\u043a\u0430 \u0444\u0438\u0433\u043e\u0432\u043e \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u2014 \u0434\u0430, \u043c\u043e\u0436\u043d\u043e \u043a\u0443\u0441\u043a\u0438 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u043c\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c\u0438 \u0438 \u043f\u043e\u0442\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0443\u0434\u0430-\u0442\u043e \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0443, \u043d\u043e \u043c\u043e\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u0442\u043e \u044d\u0442\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435\u0447\u0438\u0442\u0430\u0435\u043c\u043e \u0432\u044b\u0445\u043e\u0434\u0438\u0442. \u0418 \u0432-\u0442\u0440\u0435\u0442\u044c\u0438\u0445, \u0441\u0430\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0440\u0435\u0443\u0433\u043b\u044f\u0440\u043a\u0438 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u2014 \u0438\u0437 \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u043c\u0430\u0442\u0447\u0435\u0439 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0432\u044b\u0434\u0438\u0440\u0430\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u044b, \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c. \u0412\u0430\u0440\u0438\u0430\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0434\u043e\u0431\u0438\u0432\u0430\u0435\u0442 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/li>\n<li>\u041f\u0438\u0441\u0430\u0442\u044c \u0440\u0430\u0437\u0431\u043e\u0440 \u043f\u0430\u0440\u0441\u0435\u0440-\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u2014 \u044d\u0442\u043e \u0432\u0441\u044f\u043a\u0438\u0435 ANTLR \u0438 \u0442.\u043f. \u2014 \u043c\u043e\u0451 \u0441\u043a\u0440\u043e\u043c\u043d\u043e\u0435 \u0418\u041c\u0425\u041e \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0432\u0435\u0440\u043a\u0438\u043b\u043b \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u0412 \u0446\u0435\u043b\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u043e \u044f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e \u0441\u0435\u0431\u044f \u0447\u0443\u0432\u0441\u0442\u0432\u0443\u044e \u0432 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a<\/li>\n<li>\u041f\u0438\u0441\u0430\u0442\u044c \u0440\u0430\u0437\u0431\u043e\u0440 \u043f\u0430\u0440\u0441\u0435\u0440-\u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440\u043e\u043c \u2014 \u0430 \u0432\u043e\u0442 \u044d\u0442\u043e \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u0430\u044f (\u0445\u043e\u0442\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u0447\u0435\u043c \u0440\u0443\u0447\u043d\u043e\u0439 \u0440\u0430\u0437\u0431\u043e\u0440), \u043b\u0435\u0433\u043a\u043e \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u043b\u0435\u0433\u043a\u043e \u044d\u043c\u0431\u0435\u0434\u0438\u0442\u0441\u044f \u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u041f\u043e\u0436\u0430\u043b\u0443\u0439, \u0435\u0433\u043e \u0438 \u0432\u043e\u0437\u044c\u043c\u0435\u043c. \u0427\u0442\u043e \u0442\u0430\u043c \u0432 \u0434\u043e\u0442\u043d\u0435\u0442\u0435 \u0435\u0441\u0442\u044c? \u041e\u043a\u0435\u0439 \u0433\u0443\u0433\u043b, &#171;parser combinator C#&#187;. \u041e, \u043d\u0435\u043a\u0438\u0439 Pidgin \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0435. \u0417\u0432\u0435\u0437\u0434 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043a\u043e\u043c\u043c\u0438\u0442\u044b \u0441\u0432\u0435\u0436\u0438\u0435 \u2014 \u0431\u0435\u0440\u0451\u043c.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"parser-kombinator\">\u041f\u0430\u0440\u0441\u0435\u0440-\u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440<\/h2>\n<p>  <\/p>\n<p>\u0418\u0442\u0430\u043a, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043f\u0430\u0440\u0441\u0435\u0440-\u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440? \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043c\u043e\u043d\u0430\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u0430 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <code>char[]<\/code>) \u0432 \u043d\u0435\u043a\u0438\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434. \u0417\u0430 \u0441\u0447\u0435\u0442 \u0441\u0432\u043e\u0435\u0439 \u043c\u043e\u043d\u0430\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u0438 (\u0442.\u0435. \u043a\u043e\u043c\u043f\u043e\u0437\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438) \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0441\u0446\u0435\u043f\u043b\u044f\u0442\u044c \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c, \u043f\u043e\u043b\u0443\u0447\u0430\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u043f\u0430\u0440\u0441\u0435\u0440\u044b. \u0427\u0435\u043c \u043c\u044b \u0438 \u0437\u0430\u0439\u043c\u0435\u043c\u0441\u044f. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u2014 \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0437\u0432\u0451\u0437\u0434\u043e\u0447\u043a\u0438.<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">\/\/ \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u0448\u0438 \u043f\u0430\u0440\u0441\u0435\u0440\u044b public static class ParserHelper {   \/\/ \u041f\u0430\u0440\u0441\u0435\u0440 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 char '*' \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0430\u0440\u0441\u0435\u0440\u0430 - \u044e\u043d\u0438\u0442    \/\/ (\u0442.\u0435. \u0442\u0438\u043f, \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435) - \u0431\u0440\u0430\u0442 \u0431\u043b\u0438\u0437\u043d\u0435\u0446 void,    \/\/ \u043d\u043e \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u0438\u043f   public static Parser&lt;char, Unit> Asterisk { get; } =      Char('*').Map(_ => Unit.Value); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0430\u0440\u0443 \u0442\u0435\u0441\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u043e\u0448\u0438\u0431\u043b\u0438\u0441\u044c:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">[Fact] public void Asterisk() {   ParserHelper.Asterisk.ParseOrThrow(\"*\");   Assert.Throws&lt;ParseException>(() =>      ParserHelper.Asterisk.ParseOrThrow(\"hello\")); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u0443\u0441\u043f\u0435\u0448\u0435\u043d. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0446\u0438\u0444\u0440\u044b. \u041d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0449\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">\/\/ \u043f\u0430\u0440\u0441\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0446\u0438\u0444\u0440, \u0438\u0434\u0443\u0449\u0438\u0445 \u043f\u043e\u0434\u0440\u044f\u0434.  \/\/ \u0417\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c int.Parse, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u0447\u0438\u0441\u043b\u043e Parser&lt;char, int> NumberParser { get; } =    Digit.AtLeastOnce().Map(s => int.Parse(new string(s.ToArray())));<\/code><\/pre>\n<p>  <\/p>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0438 \u0446\u0438\u0444\u0440\u044b \u0443\u043c\u0435\u0435\u043c \u043f\u0430\u0440\u0441\u0438\u0442\u044c. \u0427\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435? \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0438\u0437 \u0434\u0432\u0443\u0445 \u0447\u0438\u0441\u0435\u043b, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u0435\u0444\u0438\u0441\u043e\u043c. \u041e\u0431\u0440\u0430\u0442\u0438\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0447\u0438\u0441\u043b\u043e &#171;12&#187; \u0434\u043e\u043b\u0436\u043d\u043e \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b &#171;12-null&#187;, \u0442.\u0435. \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043a\u043e\u043d\u0446\u0443 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c. \u041e\u043f\u044f\u0442\u044c \u0436\u0435, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">Parser&lt;char, (int begin, int? end)> IntervalParser { get; } =   from begin in NumberParser   from end in Char('-').Then(NumberParser).Optional()   select (begin, end);<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e, \u0430 \u044d\u0442\u043e \u0443\u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435. \u0427\u0442\u043e LINQ \u0443 \u043d\u0430\u0441 \u0442\u0443\u0442 \u0434\u0435\u043b\u0430\u0435\u0442? \u0410 \u0432\u043e\u0442 \u0438 \u043d\u0430\u0448\u0430 \u043c\u043e\u043d\u0430\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u2014 \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0438 \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0443-\u043d\u043e\u0442\u0430\u0446\u0438\u0435\u0439 (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u043d\u0430\u0440\u043e\u0434\u044c\u0435 \u0432 .Net \u043c\u0438\u0440\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f LINQ syntax) \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043f\u0430\u0440\u0441\u0435\u0440 \u043d\u0430 \u0431\u0430\u0437\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0445. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u0441\u0432\u044f\u0437\u044c LINQ, \u043c\u043e\u043d\u0430\u0434 \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u0432\u044b\u0441\u043e\u043a\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0439 \u0441 \u043d\u0430\u0448\u0438\u043c\u0438 \u043a\u043e\u043b\u0445\u043e\u0437\u043d\u044b\u043c\u0438 \u044f\u0437\u044b\u043a\u0430\u043c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/490112\/\">\u044f \u043f\u0438\u0441\u0430\u043b \u0442\u0443\u0442<\/a>.<\/p>\n<p>  <\/p>\n<p>\u0418\u0442\u0430\u043a, \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043f\u0430\u0440\u0441\u0435\u0440\u0443. \u0427\u0442\u043e \u0436\u0435 \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442? \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043f\u043e\u043f\u0430\u0440\u0441\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u043e\u0435 \u0447\u0438\u0441\u043b\u043e. \u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u044d\u0442\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e \u043f\u0430\u0440\u0441\u0435\u0440 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c <code>Char('-').Then(NumberParser)<\/code> \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u043e, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0437\u0430 \u0434\u0435\u0444\u0438\u0441\u043e\u043c. \u0422.\u043a. \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c null (\u0430 \u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430) \u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c <code>Optional<\/code>. \u041d\u0443 \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c, \u0432 \u043a\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2014 \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0442\u0430\u043f\u043b \u0438\u0437 \u0438\u043d\u0442\u0430 \u0438 \u043d\u0443\u043b\u043b\u0435\u0439\u0431\u043b \u0438\u043d\u0442\u0430 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u043a\u043e\u043d\u0446\u0430 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0442\u0435\u0441\u0442\u044b, \u0443\u0431\u0435\u0434\u0438\u043b\u0438\u0441\u044c, \u0447\u0442\u043e \u0443\u043c\u0435\u0435\u043c \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b. \u0427\u0442\u043e \u0442\u0430\u043c \u0443 \u043d\u0430\u0441 \u0435\u0449\u0451 \u0431\u044b\u043b\u043e. \u0410\u0433\u0430, \u0448\u0430\u0433 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430. \u041f\u0438\u0448\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>\/<\/code>, \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043b\u0438\u0431\u043e \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 <code>*<\/code>, \u043b\u0438\u0431\u043e \u043d\u0430 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435. \u041d\u0443 \u0447\u0442\u043e \u0436, \u0442\u0430\u043a \u0438 \u0437\u0430\u043f\u0438\u0448\u0435\u043c\u2026 \u0425\u043e\u0442\u044f \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u0432\u0435\u0434\u0435\u043c, \u0430 \u0442\u043e \u0442\u0430\u043f\u043b\u044b \u043d\u0430 3 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0443\u0436\u0435 \u043d\u0435\u043a\u0440\u0430\u0441\u0438\u0432\u043e \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c \u0430\u043f\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">public record ScheduleFormatEntry(int? Begin, int? End, int? Step);<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0438 \u043f\u0430\u0440\u0441\u0435\u0440 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">Parser&lt;char, ScheduleFormatEntry> WholeIntervalParser { get; } =   from interval in     Asterisk.Map(_ => (begin: default(int?), end: default(int?)))       .Or(IntervalParser.Map(x => ((int?) x.begin, x.end)))   from step in Char('\/').Then(NumberParser).Optional()   select new ScheduleFormatEntry(interval.begin, interval.end, step);<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u043e\u0434 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0430\u043c\u043e\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0439: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043f\u0440\u043e\u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0437\u0432\u0435\u0437\u0434\u043e\u0447\u043a\u0443, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0432\u044b\u0448\u043b\u043e, \u0442\u043e \u043f\u0430\u0440\u0441\u0438\u043c \u0442\u043e \u0436\u0435 \u043c\u0435\u0441\u0442\u043e \u0443\u0436\u0435 \u043a\u0430\u043a \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0447\u0438\u0441\u0435\u043b. \u0417\u0432\u0435\u0437\u0434\u043e\u0447\u043a\u0443 \u043c\u0430\u043f\u043f\u0438\u043c \u043d\u0430 \u043f\u0430\u0440\u0443 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043d\u0443\u043b\u043b\u043e\u0432, \u0430 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u0430\u043a \u0435\u0441\u0442\u044c, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c <code>int -> int?<\/code>, \u0438\u043d\u0430\u0447\u0435 \u0442\u0438\u043f\u044b \u043d\u0435 \u0441\u0445\u043e\u0434\u044f\u0442\u0441\u044f. \u0417\u0430\u0442\u0435\u043c \u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0448\u0430\u0433 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430: \u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u0448\u0430\u0433 null, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0442\u043e \u0435\u0433\u043e \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c.<\/p>\n<p>  <\/p>\n<p>\u0421\u043d\u043e\u0432\u0430 \u0442\u0435\u0441\u0442\u044b, \u0441\u043d\u043e\u0432\u0430 \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c: \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0438 \u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u044b\u0445 \u043a\u0443\u0431\u0438\u043a\u043e\u0432 (\u0437\u0432\u0435\u0437\u0434\u043e\u0447\u043a\u0430\/\u0446\u0438\u0444\u0435\u0440\u043a\u0438), \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0445 \u0432\u043c\u0435\u0441\u0442\u0435 \u0432 \u0431\u043e\u043b\u0435\u0435 \u043c\u043e\u0449\u043d\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438. \u0421\u0438\u043b\u0430 \u043c\u043e\u043d\u0430\u0434! \u041a\u0441\u0442\u0430\u0442\u0438, \u043f\u0440\u043e\u0448\u0443 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u0434\u0443 \u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u043e\u0434: \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0438\u0448\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0439 \u0442\u043e, \u0441\u0434\u0435\u043b\u0430\u0439 \u044d\u0442\u043e, \u0430 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u043e\u043d\u043e \u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u043e, \u0432 \u0444\u043e\u043d\u0435. \u041f\u0440\u043e\u0441\u0442\u043e \u0431\u0435\u0440\u0435\u0448\u044c \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0448\u044c \u0436\u0435\u043b\u0430\u0435\u043c\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443, \u0430 \u043a\u0430\u043a \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043c\u043e\u043d\u0430\u0434\u0430 \u0434\u043e\u0433\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0430, \u0442.\u043a. \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u044f \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u0430 \u0432 \u043d\u0435\u0439 \u0441\u0430\u043c\u043e\u0439 \u0438 \u043d\u0435 \u0437\u0430\u0441\u043e\u0440\u044f\u0435\u0442 \u043a\u043e\u0434. \u0427\u0435\u043c-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0410\u041e\u041f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043b\u0435\u0442 10 \u043d\u0430\u0437\u0430\u0434 \u0443 \u0432\u0441\u0435\u0445 \u043d\u0430 \u0441\u043b\u0443\u0445\u0443 \u0431\u044b\u043b\u043e.<\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a, \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u043c\u044b \u0443\u043c\u0435\u0435\u043c \u043f\u0430\u0440\u0441\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435? \u0421\u043f\u0438\u0441\u043e\u043a \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432! \u041d\u0443, \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u044f\u0442 \u0442\u043e \u0438 \u043f\u0438\u0448\u0435\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">Parser&lt;char, ScheduleFormatEntry[]> IntervalsSequenceParser { get; } =   WholeIntervalParser.SeparatedAndOptionallyTerminatedAtLeastOnce(Char(','))     .Map(x => x.ToArray())     .SelectMany(ValidateWildcards(), ((entries, _) => entries));<\/code><\/pre>\n<p>  <\/p>\n<p>\u0420\u0430\u0434\u0438 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0430\u043b \u043f\u0430\u0440\u0441\u0435\u0440 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f do \u043d\u043e\u0442\u0430\u0446\u0438\u044e. \u0422\u0443\u0442 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0447\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u2014 \u044d\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0445, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0437\u0430\u043f\u044f\u0442\u043e\u0439. \u041d\u0443 \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u043c \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e, \u0447\u0442\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0439 \u0437\u0432\u0435\u0437\u0434\u043e\u0447\u043a\u0438, \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0432\u0440\u043e\u0434\u0435 <code>1,2,*,3-5,*<\/code>.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0430\u0440\u0441\u0435\u0440\u044b \u0434\u0430\u0442\u044b, \u0434\u043d\u044f \u043d\u0435\u0434\u0435\u043b\u0438 \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0443 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b):<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">Parser&lt;char, ScheduleDate> DateParser { get; } =   from years in Validate(IntervalsSequenceParser, ValidateBoundsParser(\"Year\", Constant.MinYear, Constant.MaxYear))   from _ in Char('.')   from months in Validate(IntervalsSequenceParser, ValidateBoundsParser(\"Month\", Constant.MinMonth, Constant.MaxMonth))   from __ in Char('.')   from days in Validate(IntervalsSequenceParser, ValidateBoundsParser(\"Day\", Constant.MinDay, Constant.MaxDay))   select new ScheduleDate(years, months, days);  Parser&lt;char, ScheduleFormatEntry[]> DayOfWeekParser { get; } = Validate(IntervalsSequenceParser, ValidateBoundsParser(\"Day of week\", Constant.MinDayOfWeek, Constant.MaxDayOfWeek));  Parser&lt;char, ScheduleTime> TimeParser { get; } = from hours in Validate(IntervalsSequenceParser, ValidateBoundsParser(\"Hour\", Constant.MinHour, Constant.MaxHour)) from _ in Char(':') from min in Validate(IntervalsSequenceParser, ValidateBoundsParser(\"Min\", Constant.MinMinute, Constant.MaxMinute)) from __ in Char(':') from sec in Validate(IntervalsSequenceParser, ValidateBoundsParser(\"Sec\", Constant.MinSec, Constant.MaxSec)) from millis in Char('.').Then(Validate(IntervalsSequenceParser, ValidateBoundsParser(\"Millis\", Constant.MinMillis, Constant.MaxMillis))) .Optional() select new ScheduleTime(hours, min, sec, millis ?? new[] {ScheduleFormatEntry.SinglePoint(0)});  Parser&lt;char, ScheduleFormat> FullFormatParser { get; } = from date in Try(DateParser).Before(Char(' ')).Optional() from dayOfWeek in Try(DayOfWeekParser.Before(Char(' '))).Optional() from time in TimeParser select new ScheduleFormat( date ?? new ScheduleDate( new []{ScheduleFormatEntry.Always}, new []{ScheduleFormatEntry.Always}, new []{ScheduleFormatEntry.Always} ), dayOfWeek ?? new []{ScheduleFormatEntry.Always}, time);<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u0412 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439. \u041f\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044e \u0443 \u043d\u0430\u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0434\u0430\u0442\u044b \u0438 \u0434\u043d\u044f \u043d\u0435\u0434\u0435\u043b\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438. \u0415\u0441\u043b\u0438 \u043c\u044b \u0438\u0445 \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c, \u0437\u043d\u0430\u0447\u0438\u0442 \u0438\u0445 \u043d\u0435 \u0431\u044b\u043b\u043e \u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#171;\u0437\u0432\u0451\u0437\u0434\u043e\u0447\u043a\u0430&#187; \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0422.\u0435. \u0435\u0441\u043b\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043d\u0435 \u0437\u0430\u0434\u0430\u043d, \u044d\u0442\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u0442\u043d\u043e <code>*<\/code> \u0432\u043e \u0432\u0441\u0435\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u044f\u0445, \u0433\u0434\u0435 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u0417\u0432\u0435\u0437\u0434\u043e\u0447\u043a\u0430 \u0432 \u043d\u0430\u0448\u0438\u0445 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445 \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c <code>ScheduleFormatEntry.Always<\/code>. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0442\u0443\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0433\u0440\u0430\u043d\u0438\u0446 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c, \u043d\u043e \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u2014 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u043e\u043b\u044c \u0438 \u043f\u0435\u0447\u0430\u043b\u044c. \u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0435\u0451 \u0443\u0431\u0440\u0430\u043b\u0438 \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0431\u044b \u0432\u043e\u0442 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">Parser&lt;char, ScheduleTime> TimeParser { get; } =   from hours in IntervalsSequenceParser   from _ in Char(':')   from min in IntervalsSequenceParser   from __ in Char(':')   from sec in IntervalsSequenceParser   from millis in Char('.').Then(IntervalsSequenceParser).Optional()   select new ScheduleTime(     hours,      min,      sec,      millis ?? new[] {ScheduleFormatEntry.SinglePoint(0)});<\/code><\/pre>\n<p>  <\/p>\n<p>\u0417\u0430\u0441\u0438\u043c \u043c\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u043d\u0430\u0448\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 \u043c\u043e\u043d\u0430\u0434\u0430\u043c\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0430\u0448 <code>FullFormatParser<\/code> \u0443\u043c\u0435\u0435\u0442 \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0432\u0441\u0451, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044e. \u0418 \u043f\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438<\/p>\n<p>  <\/p>\n<h1 id=\"mapping-vspomogatelnogo-formata\">\u041c\u0430\u043f\u043f\u0438\u043d\u0433 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430<\/h1>\n<p>  <\/p>\n<p>\u0412\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u043d\u0430\u0448 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 \u0442\u043e\u0447\u0435\u043a \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e\/\u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e, \u0430 \u043c\u044b \u043f\u043e\u043f\u0430\u0440\u0441\u0438\u043b\u0438 \u043a\u0443\u0447\u0443 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u0432\u0438\u0434\u0430 &#171;\u043d\u0430\u0447\u0430\u043b\u043e-\u043a\u043e\u043d\u0435\u0446-\u0448\u0430\u0433&#187;. \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c? \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u043e\u0434\u043d\u043e \u0432 \u0434\u0440\u0443\u0433\u043e\u0435:<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">public record MergedSchedule(   ScheduleInterval Years,   ScheduleInterval Months,   ScheduleInterval Days,   ScheduleInterval DayOfWeek,   ScheduleInterval Hours,   ScheduleInterval Minutes,   ScheduleInterval Seconds,   ScheduleInterval Milliseconds) {   public static MergedSchedule FromFormat(ScheduleFormat format) =>    {     return new(       GetMerged(format.Date.Years, Constant.MinYear, Constant.MaxYear),        GetMerged(format.Date.Months, Constant.MinMonth, Constant.MaxMonth),        GetMerged(format.Date.Days, Constant.MinDay, Constant.MaxDay),        GetMerged(format.DayOfWeek, Constant.MinDayOfWeek, Constant.MaxDayOfWeek),        GetMerged(format.Time.Hours, Constant.MinHour, Constant.MaxHour),        GetMerged(format.Time.Minutes, Constant.MinMinute, Constant.MaxMinute),        GetMerged(format.Time.Seconds, Constant.MinSec, Constant.MaxSec),       GetMerged(format.Time.Milliseconds, Constant.MinMillis, Constant.MaxMillis)       );   }  private static ScheduleInterval GetMerged(ScheduleFormatEntry[] intervals, int begin, int end) { if (intervals.Length == 1 &amp;&amp; intervals[0] == ScheduleFormatEntry.Always) { return ScheduleInterval.CreateAllowedInterval(begin, end); }      var result = new ScheduleInterval(begin, end);     foreach (var scheduleFormatEntry in intervals)     {       var (b, e, s) = (scheduleFormatEntry.Begin,                         scheduleFormatEntry.End,                         scheduleFormatEntry.Step) switch       {         (null, null, {} s1) => (begin, end, s1),         ({} b2, null, null) => (b2, b2, 1),         ({} b3, {} e3, null) => (b3, e3, 1),         ({} b4, {} e4, {} s4) => (b4, e4, s4),         _ => throw new InvalidOperationException(             $\"Bad period {scheduleFormatEntry} cannot be parsed\")       };       for (int i = b; i &lt;= e; i += s)       {         result.ChangePointAllowance(i, true);       }     }      return result; } }<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u041d\u0435 \u043d\u0430\u0434\u043e \u043f\u0443\u0433\u0430\u0442\u044c\u0441\u044f, \u0442\u0443\u0442 \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u044b \u0438\u0437-\u0437\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u043d\u043e \u0432 \u0446\u0435\u043b\u043e\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442: \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0434\u0435\u043c \u043f\u043e \u0432\u0441\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430\u043c \u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0431\u0443\u043b\u0435\u0432 \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u2014 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043e \u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u044d\u0442\u043e\u0439 \u0434\u0430\u0442\u0435 \u0438\u043b\u0438 \u043d\u0435\u0442. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0430 \u0432\u0441\u0435 \u043f\u0438\u0448\u0435\u043c \u0442\u0435\u0441\u0442\u044b, \u043e\u043d\u0438 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043b\u0438 \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0438\u043b\u0438 \u043d\u0435\u0442:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">[Fact] public void SinglePoint() {   var format = new ScheduleFormat(new ScheduleDate(       new[] {ScheduleFormatEntry.SinglePoint(2020)},       new[] {ScheduleFormatEntry.SinglePoint(9)},       new[] {ScheduleFormatEntry.SinglePoint(1)}     ),     new[] {ScheduleFormatEntry.SinglePoint(1)},     new ScheduleTime(       new[] {ScheduleFormatEntry.SinglePoint(10)},       new[] {ScheduleFormatEntry.SinglePoint(0)},       new[] {ScheduleFormatEntry.SinglePoint(0)},       new[] {ScheduleFormatEntry.SinglePoint(0)}     ));   var merged = MergedSchedule.FromFormat(format);   AssertSingleValidPoint(merged.Years, 2020);   AssertSingleValidPoint(merged.Months, 9);   AssertSingleValidPoint(merged.Days, 1);   AssertSingleValidPoint(merged.DayOfWeek, 1);   AssertSingleValidPoint(merged.Hours, 10);   AssertSingleValidPoint(merged.Minutes, 0);   AssertSingleValidPoint(merged.Seconds, 0);   AssertSingleValidPoint(merged.Milliseconds, 0); }  \/\/ ... \u0438 \u0435\u0449\u0451 \u0441 \u0434\u0435\u0441\u044f\u0442\u043e\u043a \u0442\u0435\u0441\u0442\u043e\u0432, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0449\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0443 \u0438 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0442\u0435\u0441\u0442\u044b \u0437\u0435\u043b\u0435\u043d\u044b\u0435 \u2014 \u0432\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e. \u041e\u043f\u044f\u0442\u044c \u0436\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u0438\u0442\u044c\u0441\u044f \u0442\u0443\u0442 \u043d\u0435\u0433\u0434\u0435: \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432 \u0434\u0440\u0443\u0433\u0443\u044e, \u0442\u0443\u0442 \u0443\u0436\u0435 \u0434\u0430\u0436\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u0434\u0430\u043d \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044e, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0448\u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u0427\u0442\u043e \u0434\u0430\u0435\u0442 \u043d\u0430\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0443\u044e \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u2014 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u043f\u043e \u043b\u044e\u0431\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 (\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c, \u0441\u043a\u0430\u0436\u0435\u043c, \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0441\u044f), \u0442\u043e \u044d\u0442\u0438 \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435. \u0421\u0438\u043b\u0430 \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438!<\/p>\n<p>  <\/p>\n<p>\u041d\u0443, \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u043c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438, \u043d\u0430 \u043d\u0430\u0448 \u0444\u043e\u0440\u043c\u0430\u0442 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0432\u0435\u043b\u0438, \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u043c\u0435\u043b\u043e\u0447\u044c, \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c<\/p>\n<p>  <\/p>\n<h1 id=\"ischem-sobytiya\">\u0418\u0449\u0435\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u044f<\/h1>\n<p>  <\/p>\n<h2 id=\"nazad-v-buduschee\">\u041d\u0430\u0437\u0430\u0434 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u0435<\/h2>\n<p>  <\/p>\n<p>\u041f\u043e\u0434\u0433\u043b\u044f\u0434\u0435\u0432 \u0443 Quartz \u043a\u0430\u043a \u043e\u043d\u0438 \u0438\u0449\u0443\u0442 \u0434\u043d\u0438 \u043d\u0435\u0434\u0435\u043b\u0438 \u043f\u0438\u0448\u0435\u043c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u043c \u0433\u043e\u0434:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">public DateTime NearestEvent(DateTime t1) {   while (true)   {     while (!_innerSchedule.Years.IsPointAllowed(t1.Year))     {       t1 = new DateTime(t1.Year, 1, 1).AddYears(1);     }     return t1;   } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0437\u0430\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043c\u0435\u0441\u044f\u0446:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">public DateTime NearestEvent(DateTime t1) {   while (true)   {     while (!_innerSchedule.Years.IsPointAllowed(t1.Year))     {       t1 = new DateTime(t1.Year, 1, 1).AddYears(1);     }       \/\/ search for month     var year = t1.Year;     while (t1.Year == year &amp;&amp; !_innerSchedule.Months.IsPointAllowed(t1.Month))     {       t1 = new DateTime(t1.Year, t1.Month, 1).AddMonths(1);     }      if (t1.Year != year)     {        continue;     }     return t1;   } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u0434\u0435\u043d\u044c:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">public DateTime NearestEvent(DateTime t1) {   while (true)   {     ...      \/\/ search for day     var month = t1.Month;     \/\/ \u0442\u0443\u0442 \u0432\u0435\u0441\u044c\u043c\u0430 \u0442\u044f\u0436\u0435\u043b\u043e\u0432\u0435\u0441\u043d\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u043d\u043e \u0447\u0435\u0441\u0442\u043d\u043e \u043b\u0435\u043d\u044c \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0430\u0447\u0435     while (t1.Month == month &amp;&amp; !(_innerSchedule.DayOfWeek.IsPointAllowed((int) t1.DayOfWeek)          &amp;&amp; (_innerSchedule.Days.IsPointAllowed(t1.Day) ||            _innerSchedule.Days.IsPointAllowed(32)            &amp;&amp; t1.Day == DateTime.DaysInMonth(t1.Year, t1.Month))))     {        t1 = new DateTime(t1.Year, t1.Month, t1.Day).AddDays(1);     }     if (t1.Month != month)     {       continue;     }   } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u0430\u0442\u0442\u0435\u0440\u043d<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">while (someCond &amp;&amp; !realCond) {  ...} if (!someCond) { continue }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0435\u043a\u0443\u043d\u0434 \u043c\u0435\u043d\u044f \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u043f\u043e\u0434\u0437\u0430\u0434\u043e\u043b\u0431\u0430\u043b\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u044d\u0442\u043e \u043f\u0438\u0441\u0430\u0442\u044c. \u0418 \u0442\u0443\u0442 \u0432\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432 \u0434\u0435\u043b\u043e \u0433\u0435\u0440\u043e\u0439 \u0438\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0441\u0442\u0430\u0442\u044c\u0438: \u044f \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043b, \u0447\u0442\u043e \u043c\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c: <code>goto<\/code>! \u041d\u0430 \u044d\u0442\u043e\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u0435 \u043c\u0435\u043d\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u043a\u0438\u0434\u0430\u0442\u044c \u043f\u043e\u043c\u0438\u0434\u043e\u0440\u0430\u043c\u0438, \u043d\u0430\u0441\u043e\u0432\u0430\u0442\u044c \u043c\u0438\u043d\u0443\u0441\u043e\u0432 \u0432 \u043a\u0430\u0440\u043c\u0443, \u043e\u0442\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0442\u044c &#171;\u0412\u043e\u043d \u0414\u0435\u0439\u043a\u0441\u0442\u0440\u0430 \u0447\u0442\u043e \u043f\u0438\u0441\u0430\u043b, \u0442\u044b \u0447\u0435\u0433\u043e \u0442\u0432\u043e\u0440\u0438\u0448\u044c?! \u041f\u043e\u0437\u043e\u0440&#187; \u043d\u0443 \u0438 \u0432\u0441\u0435 \u0432 \u0442\u0430\u043a\u043e\u043c \u0434\u0443\u0445\u0435. \u041d\u043e, \u043f\u043e \u0437\u0440\u0435\u043b\u043e\u043c\u0443 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044e \u044f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u043e\u043d\u043e \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445 \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u043b\u0438\u0448\u043d\u0435\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435, \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043e\u0434 \u0447\u0438\u0449\u0435. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0441\u0430\u043c\u0438, \u0432\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u043e\u0438\u0441\u043a \u0434\u043e \u0434\u043d\u0435\u0439:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">public DateTime NearestEvent(DateTime t1) {   while (true)   {     LoopStart: ;     \/\/ search for year     while (!_innerSchedule.Years.IsPointAllowed(t1.Year))     {       t1 = new DateTime(t1.Year, 1, 1).AddYears(1);     }      \/\/ search for month     var year = t1.Year;     while (!_innerSchedule.Months.IsPointAllowed(t1.Month))     {       t1 = new DateTime(t1.Year, t1.Month, 1).AddMonths(1);       if (t1.Year != year)       {         goto LoopStart;       }     }      \/\/ search for day     var month = t1.Month;     while (!(_innerSchedule.DayOfWeek.IsPointAllowed((int) t1.DayOfWeek)          &amp;&amp; (_innerSchedule.Days.IsPointAllowed(t1.Day) ||            _innerSchedule.Days.IsPointAllowed(32)            &amp;&amp; t1.Day == DateTime.DaysInMonth(t1.Year, t1.Month))))     {        t1 = new DateTime(t1.Year, t1.Month, t1.Day).AddDays(1);       if (t1.Month != month)       {         goto LoopStart;       }     }   } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0441\u043a\u0430\u0436\u0443 \u2014 \u043d\u043e \u0433\u043e\u0443\u0442\u0443 \u0438 \u043f\u0440\u0430\u0432\u0434\u0430 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435. \u041e\u0431\u044b\u0447\u043d\u043e \u043e\u043d \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u2014 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041d\u043e \u043d\u0435 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0434\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c <code>continue<\/code> \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u0446\u0438\u043a\u043b\u0435, \u0430 \u043d\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0438\u043d\u043b\u0430\u0439\u043d\u0435\u043d (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0434\u043d\u044f\u043c\u0438), \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c. \u0412 \u0438\u0434\u0435\u0430\u043b\u0435 \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u043c \u0438\u043b\u0438 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u0444\u0438\u0447\u0435\u0439 \u0432\u0440\u043e\u0434\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">mainLoop: while (true) {   \/\/ search for year   while (!_innerSchedule.Years.IsPointAllowed(t1.Year))   {     t1 = new DateTime(t1.Year, 1, 1).AddYears(1);   }    \/\/ search for month   var year = t1.Year;   while (!_innerSchedule.Months.IsPointAllowed(t1.Month))   {     t1 = new DateTime(t1.Year, t1.Month, 1).AddMonths(1);     if (t1.Year != year)     {       continue mainLoop;     }   } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u043e \u0443\u0432\u044b, \u043d\u0438 \u0442\u043e\u0433\u043e, \u043d\u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0434\u0430, \u0433\u043e\u0443\u0442\u0443 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u043c (\u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434) \u0438\u0437 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432. \u0418 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0437\u0438\u0440\u043e\u043a\u043e\u0441\u0442, \u0447\u0442\u043e \u043d\u0435\u043c\u0430\u043b\u043e\u0432\u0430\u0436\u043d\u043e.<\/p>\n<p>  <\/p>\n<p>\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">public DateTime NearestEvent(DateTime t1) {   while (true)   {     LoopStart: ;     \/\/ search for year     while (!_innerSchedule.Years.IsPointAllowed(t1.Year))     {       t1 = new DateTime(t1.Year, 1, 1).AddYears(1);     }      \/\/ search for month     var year = t1.Year;     while (!_innerSchedule.Months.IsPointAllowed(t1.Month))     {       t1 = new DateTime(t1.Year, t1.Month, 1).AddMonths(1);       if (t1.Year != year)       {         goto LoopStart;       }     }      \/\/ search for day     var month = t1.Month;     while (!(_innerSchedule.DayOfWeek.IsPointAllowed((int) t1.DayOfWeek)          &amp;&amp; (_innerSchedule.Days.IsPointAllowed(t1.Day) ||            _innerSchedule.Days.IsPointAllowed(32)            &amp;&amp; t1.Day == DateTime.DaysInMonth(t1.Year, t1.Month))))     {        t1 = new DateTime(t1.Year, t1.Month, t1.Day).AddDays(1);       if (t1.Month != month)       {         goto LoopStart;       }     }      \/\/ search for hour     var day = t1.Day;     while (!_innerSchedule.Hours.IsPointAllowed(t1.Hour))     {       t1 = new DateTime(t1.Year, t1.Month, t1.Day, t1.Hour, 0, 0).AddHours(1);       if (t1.Day != day)       {         goto LoopStart;       }     }      \/\/ search for minute     var hour = t1.Hour;     while (!_innerSchedule.Minutes.IsPointAllowed(t1.Minute))     {       t1 = new DateTime(t1.Year, t1.Month, t1.Day, t1.Hour, t1.Minute, 0).AddMinutes(1);       if (t1.Hour != hour)       {         goto LoopStart;       }     }      \/\/ search for second     var minute = t1.Minute;     while (!_innerSchedule.Seconds.IsPointAllowed(t1.Second))     {       t1 = new DateTime(t1.Year, t1.Month, t1.Day, t1.Hour, t1.Minute, t1.Second).AddSeconds(1);       if (t1.Minute != minute)       {         goto LoopStart;       }     }      \/\/ search for ms     var second = t1.Second;     while (!_innerSchedule.Milliseconds.IsPointAllowed(t1.Millisecond))     {       t1 = t1.AddMilliseconds(1);       if (t1.Second != second)       {         goto LoopStart;       }     }      return t1;   } }<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<h2 id=\"vpered-v-proshloe\">\u0412\u043f\u0435\u0440\u0435\u0434 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0435<\/h2>\n<p>  <\/p>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0430\u0437\u0430\u0434 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438:<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">public DateTime NearestPrevEvent(DateTime t1) {   while (true)   {     LoopStart: ;     \/\/ search for year     while (!_innerSchedule.Years.IsPointAllowed(t1.Year))     {       t1 = new DateTime(t1.Year, 1, 1).AddMilliseconds(-1);     }      \/\/ search for month     var year = t1.Year;     while (!_innerSchedule.Months.IsPointAllowed(t1.Month))     {       t1 = new DateTime(t1.Year, t1.Month, 1).AddMilliseconds(-1);       if (t1.Year != year)       {         goto LoopStart;       }     }      \/\/ search for day     var month = t1.Month;     while (!(_innerSchedule.DayOfWeek.IsPointAllowed((int) t1.DayOfWeek)          &amp;&amp; (_innerSchedule.Days.IsPointAllowed(t1.Day) ||            _innerSchedule.Days.IsPointAllowed(32)            &amp;&amp; t1.Day == DateTime.DaysInMonth(t1.Year, t1.Month))))     {        t1 = new DateTime(t1.Year, t1.Month, t1.Day).AddMilliseconds(-1);       if (t1.Month != month)       {         goto LoopStart;       }     }      \/\/ search for hour     var day = t1.Day;     while (!_innerSchedule.Hours.IsPointAllowed(t1.Hour))     {       t1 = new DateTime(t1.Year, t1.Month, t1.Day, t1.Hour, 0, 0).AddMilliseconds(-1);       if (t1.Day != day)       {         goto LoopStart;       }     }      \/\/ search for minute     var hour = t1.Hour;     while (!_innerSchedule.Minutes.IsPointAllowed(t1.Minute))     {       t1 = new DateTime(t1.Year, t1.Month, t1.Day, t1.Hour, t1.Minute, 0).AddMilliseconds(-1);       if (t1.Hour != hour)       {         goto LoopStart;       }     }      \/\/ search for second     var minute = t1.Minute;     while (!_innerSchedule.Seconds.IsPointAllowed(t1.Second))     {       t1 = new DateTime(t1.Year, t1.Month, t1.Day, t1.Hour, t1.Minute, t1.Second).AddMilliseconds(-1);       if (t1.Minute != minute)       {         goto LoopStart;       }     }      \/\/ search for ms     var second = t1.Second;     while (!_innerSchedule.Milliseconds.IsPointAllowed(t1.Millisecond))     {       t1 = t1.AddMilliseconds(-1);       if (t1.Second != second)       {         goto LoopStart;       }     }      return t1;   } }<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u0422\u0443\u0442 \u0441\u0442\u043e\u0438\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 <a href=\"https:\/\/habr.com\/ru\/post\/571342\/#comment_23338480\">\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439<\/a> \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0430 <a href=\"https:\/\/habr.com\/ru\/users\/sepulkary\/\" class=\"user_link\">sepulkary<\/a><\/p>\n<p>  <\/p>\n<blockquote><p>\u0423 \u0432\u0430\u0441 \u0434\u0432\u0430 \u0431\u043e\u043b\u044c\u0448\u0443\u0449\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u0430, \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u043a\u043e\u043c<\/p><\/blockquote>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u043c\u0435\u0442\u0438\u0442, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0435\u0449\u0451 \u043e\u0434\u043d\u043e\u0439 \u043d\u0435\u043c\u0430\u043b\u043e\u0432\u0430\u0436\u043d\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u0433\u043e\u0434\u044b \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">while (!_innerSchedule.Years.IsPointAllowed(t1.Year)) {   t1 = new DateTime(t1.Year, 1, 1).AddYears(1); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">while (!_innerSchedule.Years.IsPointAllowed(t1.Year)) {   t1 = new DateTime(t1.Year, 1, 1).AddMilliseconds(-1); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u0435\u0434\u044c \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0433\u043e\u0434, \u0442\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u043d\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043c\u0435\u0441\u044f\u0446\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0433\u043e\u0434\u0430.<br \/>  \u0410 \u0432\u043e\u0442 \u0435\u0441\u043b\u0438 \u043c\u044b \u0438\u0449\u0435\u043c <em>\u043d\u0430\u0437\u0430\u0434<\/em>, \u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e 31 \u0434\u0435\u043a\u0430\u0431\u0440\u044f 23:59:59.9999999999\u2026 \u0422\u043e \u0435\u0441\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0442\u0440\u0435\u0444\u0430\u0447\u0438\u0442\u044c \u0432\u043e \u0447\u0442\u043e-\u0442\u043e \u0432\u0438\u0434\u0430 <code>t1 = yearChangingLambda(t1)<\/code> \u2014 \u0442.\u0435. \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043b\u044f\u043c\u0431\u0434\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u043b\u0438\u043a\u0432\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438. \u041d\u043e \u0442\u0443\u0442 \u043d\u0430\u0441 \u043a\u0443\u0441\u0430\u0435\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2014 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0432 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u0446\u0438\u043a\u043b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043b\u044f\u043c\u0431\u0434\u0443 \u044d\u0442\u043e \u043d\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e. \u0414\u0430 \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0443\u0447\u0443 \u043b\u044f\u043c\u0431\u0434 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435\u043a\u0440\u0430\u0441\u0438\u0432\u043e. \u0415\u0441\u0442\u044c \u043b\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430\u0441 \u0443\u0441\u0442\u0440\u043e\u0438\u0442? \u0418 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043e\u0442\u0432\u0435\u0442 \u2014 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0441\u0451.<\/p>\n<p>  <\/p>\n<h2 id=\"zero-cost-reshenie-problemy-razlichiya-funkciy\">Zero-cost \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/h2>\n<p>  <\/p>\n<p>\u0412 \u043c\u0438\u0440\u0435 \u0434\u043e\u0442\u043d\u0435\u0442\u0430 \u0435\u0441\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0445 \u043a\u043e\u043d\u0444\u0430\u0445 \u0432\u0440\u043e\u0434\u0435 DotNext. \u042d\u0442\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0436\u0438\u0442\u043e\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u043a\u043e\u0432 \u0434\u043b\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440. \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435, \u0434\u0436\u0438\u0442 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c \u0446\u0435\u043b\u044b\u0435 \u043a\u0443\u0441\u043a\u0438 \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u0438\u043f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0442\u0430\u0439\u043f\u043b\u0435\u0432\u0435\u043b <code>Bool<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">public interface IBool { }  public struct TrueType : IBool { }  public struct FalseType : IBool { }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u044d\u0442\u0438\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0434\u043b\u044f \u0442\u0430\u0439\u043f\u043b\u0435\u0432\u0435\u043b \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441 \u0443\u0440\u043e\u0432\u043d\u044f \u0442\u0438\u043f\u043e\u0432 \u0434\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">public struct Test {   [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]   public static bool IsTrue&lt;T>() where T : struct, IBool =>     default(T) switch     {       TrueType _ => true,       FalseType _ => false     }; }  ...  public bool Foo() => Test.IsTrue&lt;TrueType>()<\/code><\/pre>\n<p>  <\/p>\n<p><em>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, RyuJit \u043d\u0435 \u0434\u043e\u0433\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0441\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043a\u0435\u0439\u0441\u044b. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445<\/em><\/p>\n<p>  <\/p>\n<p>\u0412\u043e \u0447\u0442\u043e, \u043f\u043e-\u0432\u0430\u0448\u0435\u043c\u0443, \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f Foo? \u0410 <a href=\"https:\/\/sharplab.io\/#gist:10018933753d4e0331e317e41d63e40f\" rel=\"nofollow noopener noreferrer\">\u0432\u043e\u0442 \u0432\u043e \u0447\u0442\u043e<\/a>:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">C.Foo()   L0000: push ebp   L0001: mov ebp, esp   L0003: mov eax, 1   L0008: pop ebp   L0009: ret<\/code><\/pre>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u043c\u044b \u0432\u0438\u0434\u0438\u043c? \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u0440\u0443\u0437\u0438\u0442 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 <code>1 (true)<\/code> \u043d\u0430 \u0441\u0442\u0435\u043a \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442. \u0422.\u0435. \u043e\u043d \u0443\u0432\u0438\u0434\u0435\u043b, \u0447\u0442\u043e \u0438\u0437 \u0432\u0441\u0435\u0445 \u0432\u0435\u0442\u043e\u043a switch \u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 (\u0442\u0430\u043c \u0433\u0434\u0435 TrueType) \u0438 \u0432\u044b\u043a\u0438\u043d\u0443\u043b \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435, \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0432\u0435\u0441\u044c \u0441\u0432\u0438\u0442\u0447 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u0443\u044e \u0432\u0435\u0442\u0432\u044c. \u0417\u0430\u0442\u0435\u043c \u043e\u043d \u0443\u0432\u0438\u0434\u0435\u043b, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>TrueType _<\/code> \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438 \u0443\u0431\u0440\u0430\u043b \u0435\u0451. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0435\u043c\u0443 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0438\u043d\u043b\u0430\u0439\u043d\u0438\u0442\u044c \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>return true<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0436\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u044b \u0432 \u0438\u0442\u043e\u0433\u0435 \u043d\u0435 \u0443\u0432\u0438\u0434\u0435\u043b\u0438, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d\u043e\u043a\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 <code>1<\/code>.<\/p>\n<p>  <\/p>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435: \u0430 \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u0432\u044b\u043d\u0435\u0441\u0435\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u0442 \u0442\u0443\u0434\u0430 \u0436\u0435? \u0421\u043a\u0430\u0437\u0430\u043d\u043e-\u0441\u0434\u0435\u043b\u0430\u043d\u043e:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">public interface IDateTimeChanger {   DateTime Change&lt;TIsIncrementing>(DateTime t1)      where TIsIncrementing : struct, IBool; }  public struct YearsChanger : IDateTimeChanger {   [MethodImpl(MethodImplOptions.AggressiveInlining                | MethodImplOptions.AggressiveOptimization)]   public DateTime Change&lt;TIsIncrementing>(DateTime t1)      where TIsIncrementing : struct, IBool   {     var baseValue = new DateTime(t1.Year, 1, 1);     return default(TIsIncrementing) switch     {       TrueType _ => baseValue.AddYears(1),       FalseType _ => baseValue.AddMilliseconds(-1)     };   } }  \/\/ ... \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0434\u0430\u0442\u044b \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e<\/code><\/pre>\n<p>  <\/p>\n<p><code>TIsIncrementing<\/code> \u042d\u0442\u043e \u043b\u0438\u0431\u043e TrueType \u043b\u0438\u0431\u043e FalseType, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442 \u043d\u0430\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0435\u0441\u043b\u0438 \u043c\u044b \u0438\u0449\u0435\u043c \u0432\u043f\u0435\u0440\u0435\u0434 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (NearestEvent) \u0438\u043b\u0438 \u043d\u0430\u0437\u0430\u0434 (NearestPrevEvent).<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430\u0448\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f? \u0412\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">private DateTime Closest&lt;TIsIncrementing>(DateTime t1)    where TIsIncrementing : struct, IBool {   var yearChanger = default(YearsChanger);   var monthChanger = default(MonthChanger);   var dayChanger = default(DayChanger);   var hourChanger = default(HourChanger);   var minuteChanger = default(MinuteChanger);   var secondChanger = default(SecondChanger);   var millisecondChanger = default(MillisecondChanger);   while (true)   {     LoopStart: ;     \/\/ search for year     while (!_innerSchedule.Years.IsPointAllowed(t1.Year))     {       t1 = yearChanger.Change&lt;TIsIncrementing>(t1);     }      \/\/ search for month     var year = t1.Year;     while (!_innerSchedule.Months.IsPointAllowed(t1.Month))     {       t1 = monthChanger.Change&lt;TIsIncrementing>(t1);       if (t1.Year != year)       {         goto LoopStart;       }     }      \/\/ search for day     var month = t1.Month;     while (!(_innerSchedule.DayOfWeek.IsPointAllowed((int) t1.DayOfWeek)          &amp;&amp; (_innerSchedule.Days.IsPointAllowed(t1.Day) ||            _innerSchedule.Days.IsPointAllowed(32)            &amp;&amp; t1.Day == DateTime.DaysInMonth(t1.Year, t1.Month))))     {        t1 = dayChanger.Change&lt;TIsIncrementing>(t1);       if (t1.Month != month)       {         goto LoopStart;       }     }      \/\/ search for hour     var day = t1.Day;     while (!_innerSchedule.Hours.IsPointAllowed(t1.Hour))     {       t1 = hourChanger.Change&lt;TIsIncrementing>(t1);       if (t1.Day != day)       {         goto LoopStart;       }     }      \/\/ search for minute     var hour = t1.Hour;     while (!_innerSchedule.Minutes.IsPointAllowed(t1.Minute))     {       t1 = minuteChanger.Change&lt;TIsIncrementing>(t1);       if (t1.Hour != hour)       {         goto LoopStart;       }     }      \/\/ search for second     var minute = t1.Minute;     while (!_innerSchedule.Seconds.IsPointAllowed(t1.Second))     {       t1 = secondChanger.Change&lt;TIsIncrementing>(t1);       if (t1.Minute != minute)       {         goto LoopStart;       }     }      \/\/ search for second     var second = t1.Second;     while (!_innerSchedule.Milliseconds.IsPointAllowed(t1.Millisecond))     {       t1 = millisecondChanger.Change&lt;TIsIncrementing>(t1);       if (t1.Second != second)       {         goto LoopStart;       }     }      return t1;   } }<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u0427\u044c\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e:<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">public DateTime NearestEvent(DateTime t1) => Closest&lt;TrueType>(t1); public DateTime NearestPrevEvent(DateTime t1) => Closest&lt;FalseType>(t1);<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418, \u043d\u0430 \u044d\u0442\u043e\u043c \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0432\u0441\u0451. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0441\u0451 \u0432 \u0441\u0431\u043e\u0440\u0435, \u043d\u0443 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438<\/p>\n<p>  <\/p>\n<h2 id=\"sravnivaem-s-originalnym-resheniem-avtora\">\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0430\u0432\u0442\u043e\u0440\u0430<\/h2>\n<p>  <\/p>\n<h3 id=\"parsing\">\u041f\u0430\u0440\u0441\u0438\u043d\u0433<\/h3>\n<p>  <\/p>\n<p>\u0412\u043e \u0432\u0441\u0435\u0445 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\u0445 \u0432\u0435\u0440\u0441\u0438\u044f <a href=\"https:\/\/habr.com\/ru\/users\/novar\/\" class=\"user_link\">novar<\/a> \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0431\u0430\u0437\u043e\u0432\u043e\u0439, \u043e\u0442 \u043d\u0435\u0451 \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435. \u0418 \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043c\u044b \u0441\u0440\u0430\u0432\u043d\u0438\u043c, \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">BenchmarkDotNet=v0.13.0, OS=Windows 10.0.19043.1110 (21H1\/May2021Update) AMD Ryzen 7 3800X, 1 CPU, 16 logical and 8 physical cores .NET 5.0 : .NET 5.0.8 (5.0.821.31504), X64 RyuJIT<\/code><\/pre>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>Method<\/th>\n<th>Pattern<\/th>\n<th>Mean<\/th>\n<th>Error<\/th>\n<th>StdDev<\/th>\n<th>Ratio<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>ParsingOld<\/td>\n<td><em>.<\/em>.*(&#8230;)-20\/3<\/td>\n<td>506.9 ns<\/td>\n<td>9.84 ns<\/td>\n<td>9.21 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>ParsingNew<\/td>\n<td><em>.<\/em>.*(&#8230;)-20\/3<\/td>\n<td>17,263.0 ns<\/td>\n<td>132.16 ns<\/td>\n<td>123.62 ns<\/td>\n<td>34.06<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>ParsingOld<\/td>\n<td><em>.<\/em>.1 0:0:0<\/td>\n<td>365.6 ns<\/td>\n<td>4.83 ns<\/td>\n<td>4.28 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>ParsingNew<\/td>\n<td><em>.<\/em>.1 0:0:0<\/td>\n<td>15,150.4 ns<\/td>\n<td>17.63 ns<\/td>\n<td>16.49 ns<\/td>\n<td>41.45<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>ParsingOld<\/td>\n<td><em>.9.<\/em>(&#8230;)0.000<\/td>\n<td>400.5 ns<\/td>\n<td>6.84 ns<\/td>\n<td>8.89 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>ParsingNew<\/td>\n<td><em>.9.<\/em>(&#8230;)0.000<\/td>\n<td>17,347.5 ns<\/td>\n<td>166.40 ns<\/td>\n<td>155.65 ns<\/td>\n<td>43.19<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>ParsingOld<\/td>\n<td>2100.(&#8230;)9.999<\/td>\n<td>322.3 ns<\/td>\n<td>2.28 ns<\/td>\n<td>1.90 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>ParsingNew<\/td>\n<td>2100.(&#8230;)9.999<\/td>\n<td>19,551.1 ns<\/td>\n<td>71.56 ns<\/td>\n<td>66.93 ns<\/td>\n<td>60.66<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u041a\u0430\u043a\u043e\u0439 \u043a\u043e\u0448\u043c\u0430\u0440, \u0443\u0436\u0430\u0441, \u0432 50 \u0440\u0430\u0437 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435! \u0412\u044b\u043a\u0438\u043d\u0443\u0442\u044c \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u043d\u0430 \u043f\u043e\u043c\u043e\u0439\u043a\u0443, \u043e\u043f\u044f\u0442\u044c \u043c\u043e\u043d\u0430\u0434\u043a\u0438 \u043d\u0435\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u044b \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435! \u2014 \u0441\u043a\u0430\u0437\u0430\u043b \u0431\u044b \u043a\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c, \u0438 \u044f \u0431\u044b \u0441 \u043d\u0438\u043c \u043d\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u043b\u0441\u044f. \u0414\u0430, \u0432\u0440\u0435\u043c\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043a\u0440\u0430\u0442\u043d\u043e \u0445\u0443\u0436\u0435, \u043d\u043e, \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0447\u0442\u043e \u043e\u043d\u043e \u0432\u0441\u0435 \u0435\u0449\u0451 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 20 <strong><em>\u043c\u0438\u043a\u0440\u043e<\/em><\/strong>\u0441\u0435\u043a\u0443\u043d\u0434 \u0438 \u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043f\u0430\u0440\u0448\u0438\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u0434\u043e\u0440\u043e\u0433\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0445\u043e\u0442\u044c 50000 \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043d\u0430\u0448 \u043f\u0430\u0440\u0441\u0435\u0440 \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043c\u0435\u0435\u0442 \u043a\u0443\u0447\u0443 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432: \u043e\u043d \u043a\u043e\u043c\u043f\u043e\u0437\u0430\u0431\u0435\u043b\u0435\u043d, \u043e\u043d \u043b\u0435\u0433\u043a\u043e \u0447\u0438\u0442\u0430\u0435\u043c\/\u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c, \u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0432\u0430\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043c\u0435\u0441\u0442\u043e \u0438 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435 \u0441\u043c\u043e\u0433 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c. \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0436\u0435 \u043f\u0430\u0440\u0441\u0435\u0440 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0442\u0440\u0435\u043a\u0430\u0435\u0442 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0440\u043e\u0441\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 &#171;\u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a&#187;. \u0410 \u043a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u0440\u043e\u043c.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u0445\u043e\u0442\u044f \u043f\u0430\u0440\u0441\u0435\u0440 \u0438 \u043e\u0449\u0443\u0442\u0438\u043c\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u043e\u043d \u0432\u0441\u0435 \u0435\u0449\u0451 \u0433\u043e\u0434\u0435\u043d \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0410 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u2014 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u0441 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u044b\u043c \u0437\u0430\u043f\u0430\u0441\u043e\u043c.<\/p>\n<p>  <\/p>\n<p>\u0418\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435 \u2014 \u043f\u043e\u0438\u0441\u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<p>  <\/p>\n<h3 id=\"opredelenie-blizhayshego-sobytiya\">\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f<\/h3>\n<p>  <\/p>\n<p>\u042f \u0432\u0437\u044f\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0438\u0437 \u0442\u0435\u0445, \u0447\u0442\u043e \u0431\u044b\u043b\u0438 \u0434\u0430\u043d\u044b \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432 \u0437\u0430\u0434\u0430\u043d\u0438\u0438, \u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b:<\/p>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>Method<\/th>\n<th>Pattern<\/th>\n<th>DateString<\/th>\n<th>Mean<\/th>\n<th>Error<\/th>\n<th>StdDev<\/th>\n<th>Ratio<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>FindNextOld<\/td>\n<td><em>.<\/em>.1 0:0:0<\/td>\n<td>2001-01-01<\/td>\n<td>15,711.7 ns<\/td>\n<td>196.24 ns<\/td>\n<td>173.96 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>FindNextNewCopypasted<\/td>\n<td><em>.<\/em>.1 0:0:0<\/td>\n<td>2001-01-01<\/td>\n<td>15,219.1 ns<\/td>\n<td>295.22 ns<\/td>\n<td>373.35 ns<\/td>\n<td>0.96<\/td>\n<\/tr>\n<tr>\n<td>FindNextNewTypelevel<\/td>\n<td><em>.<\/em>.1 0:0:0<\/td>\n<td>2001-01-01<\/td>\n<td>14,427.3 ns<\/td>\n<td>173.55 ns<\/td>\n<td>162.34 ns<\/td>\n<td>0.92<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>FindNextOld<\/td>\n<td><em>.<\/em>.1 0:0:0<\/td>\n<td>2080-05-05<\/td>\n<td>2,291.2 ns<\/td>\n<td>21.13 ns<\/td>\n<td>19.77 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>FindNextNewCopypasted<\/td>\n<td><em>.<\/em>.1 0:0:0<\/td>\n<td>2080-05-05<\/td>\n<td>1,598.7 ns<\/td>\n<td>3.23 ns<\/td>\n<td>2.87 ns<\/td>\n<td>0.70<\/td>\n<\/tr>\n<tr>\n<td>FindNextNewTypelevel<\/td>\n<td><em>.<\/em>.1 0:0:0<\/td>\n<td>2080-05-05<\/td>\n<td>909.9 ns<\/td>\n<td>3.29 ns<\/td>\n<td>2.75 ns<\/td>\n<td>0.40<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>FindNextOld<\/td>\n<td>*.4.6(&#8230;)-20\/3<\/td>\n<td>2001-01-01<\/td>\n<td>740.6 ns<\/td>\n<td>4.03 ns<\/td>\n<td>3.57 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>FindNextNewCopypasted<\/td>\n<td>*.4.6(&#8230;)-20\/3<\/td>\n<td>2001-01-01<\/td>\n<td>573.2 ns<\/td>\n<td>4.30 ns<\/td>\n<td>4.02 ns<\/td>\n<td>0.77<\/td>\n<\/tr>\n<tr>\n<td>FindNextNewTypelevel<\/td>\n<td>*.4.6(&#8230;)-20\/3<\/td>\n<td>2001-01-01<\/td>\n<td>448.4 ns<\/td>\n<td>1.21 ns<\/td>\n<td>1.08 ns<\/td>\n<td>0.61<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>FindNextOld<\/td>\n<td>*.4.6(&#8230;)-20\/3<\/td>\n<td>2080-05-05<\/td>\n<td>1,279.1 ns<\/td>\n<td>12.11 ns<\/td>\n<td>11.33 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>FindNextNewCopypasted<\/td>\n<td>*.4.6(&#8230;)-20\/3<\/td>\n<td>2080-05-05<\/td>\n<td>1,127.8 ns<\/td>\n<td>4.40 ns<\/td>\n<td>4.11 ns<\/td>\n<td>0.88<\/td>\n<\/tr>\n<tr>\n<td>FindNextNewTypelevel<\/td>\n<td>*.4.6(&#8230;)-20\/3<\/td>\n<td>2080-05-05<\/td>\n<td>998.4 ns<\/td>\n<td>10.09 ns<\/td>\n<td>9.43 ns<\/td>\n<td>0.78<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>FindNextOld<\/td>\n<td><em>.9.<\/em>(&#8230;)0.000<\/td>\n<td>2001-01-01<\/td>\n<td>1,720.7 ns<\/td>\n<td>5.47 ns<\/td>\n<td>4.85 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>FindNextNewCopypasted<\/td>\n<td><em>.9.<\/em>(&#8230;)0.000<\/td>\n<td>2001-01-01<\/td>\n<td>1,187.7 ns<\/td>\n<td>6.18 ns<\/td>\n<td>5.16 ns<\/td>\n<td>0.69<\/td>\n<\/tr>\n<tr>\n<td>FindNextNewTypelevel<\/td>\n<td><em>.9.<\/em>(&#8230;)0.000<\/td>\n<td>2001-01-01<\/td>\n<td>1,132.8 ns<\/td>\n<td>17.35 ns<\/td>\n<td>15.38 ns<\/td>\n<td>0.66<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>FindNextOld<\/td>\n<td><em>.9.<\/em>(&#8230;)0.000<\/td>\n<td>2080-05-05<\/td>\n<td>1,461.2 ns<\/td>\n<td>10.35 ns<\/td>\n<td>9.17 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>FindNextNewCopypasted<\/td>\n<td><em>.9.<\/em>(&#8230;)0.000<\/td>\n<td>2080-05-05<\/td>\n<td>931.9 ns<\/td>\n<td>3.31 ns<\/td>\n<td>2.77 ns<\/td>\n<td>0.64<\/td>\n<\/tr>\n<tr>\n<td>FindNextNewTypelevel<\/td>\n<td><em>.9.<\/em>(&#8230;)0.000<\/td>\n<td>2080-05-05<\/td>\n<td>871.6 ns<\/td>\n<td>1.26 ns<\/td>\n<td>1.18 ns<\/td>\n<td>0.60<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>FindNextOld<\/td>\n<td>2100.(&#8230;)9.999<\/td>\n<td>2001-01-01<\/td>\n<td>22,167.7 ns<\/td>\n<td>221.81 ns<\/td>\n<td>207.48 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>FindNextNewCopypasted<\/td>\n<td>2100.(&#8230;)9.999<\/td>\n<td>2001-01-01<\/td>\n<td>20,821.5 ns<\/td>\n<td>211.02 ns<\/td>\n<td>197.39 ns<\/td>\n<td>0.94<\/td>\n<\/tr>\n<tr>\n<td>FindNextNewTypelevel<\/td>\n<td>2100.(&#8230;)9.999<\/td>\n<td>2001-01-01<\/td>\n<td>20,544.2 ns<\/td>\n<td>274.01 ns<\/td>\n<td>228.81 ns<\/td>\n<td>0.93<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>FindNextOld<\/td>\n<td>2100.(&#8230;)9.999<\/td>\n<td>2080-05-05<\/td>\n<td>20,451.8 ns<\/td>\n<td>404.82 ns<\/td>\n<td>397.59 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>FindNextNewCopypasted<\/td>\n<td>2100.(&#8230;)9.999<\/td>\n<td>2080-05-05<\/td>\n<td>18,717.9 ns<\/td>\n<td>357.62 ns<\/td>\n<td>382.65 ns<\/td>\n<td>0.91<\/td>\n<\/tr>\n<tr>\n<td>FindNextNewTypelevel<\/td>\n<td>2100.(&#8230;)9.999<\/td>\n<td>2080-05-05<\/td>\n<td>18,040.7 ns<\/td>\n<td>328.40 ns<\/td>\n<td>307.19 ns<\/td>\n<td>0.88<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>FindNextOld \u2014 \u044d\u0442\u043e \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u0432\u0442\u043e\u0440\u0430, FindNextNewCopypasted \u2014 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043c\u043e\u0449\u044c\u044e \u0442\u0438\u043f\u0447\u0438\u043a\u043e\u0432, \u0438 FindNextNewTypelevel \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438\u0442\u043e\u0433\u043e\u0432\u0430\u044f \u0442\u0430\u0439\u043f\u043b\u0435\u0432\u0435\u043b \u0432\u0435\u0440\u0441\u0438\u044f. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0438 \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u043d\u0430\u044f, \u0438 \u0442\u0430\u0439\u043f\u043b\u0435\u0432\u0435\u043b \u0432\u0435\u0440\u0441\u0438\u0438 \u0438\u043c\u0435\u044e\u0442 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u043f\u0435\u0440\u0444\u043e\u0440\u043c\u0430\u043d\u0441. \u0412\u0441\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043e\u043d\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u0439 \u043a\u043e\u0434. \u0410 \u0432\u0435\u0434\u044c \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u044b \u0443\u0431\u0440\u0430\u043b\u0438 \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0443 \u0438 \u0441\u043c\u043e\u0433\u043b\u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434, \u043d\u0430\u043f\u0438\u0441\u0430\u0432 \u043e\u0434\u043d\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432. \u0421\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u0438 \u0431\u0435\u0437 \u0441\u043c\u0441.<\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0435\u0441\u043b\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0441 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u2014 \u0442\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u0430 \u0442\u0435\u043c, \u0447\u0442\u043e \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 \u0430\u0432\u0442\u043e\u0440\u0430 \u043f\u0440\u0438 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0438\u0441\u043a \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430. \u0412 \u043c\u043e\u0435\u043c \u0436\u0435 \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u044e \u0441\u0442\u0430\u0440\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0433\u043e\u0434 \u0434\u043b\u044f \u043c\u0435\u0441\u044f\u0446\u0430, \u043c\u0435\u0441\u044f\u0446 \u0434\u043b\u044f \u0434\u043d\u044f \u0438 \u0442.\u043f.) \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u0447\u0435\u0442, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f. \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u0432\u0430\u0442\u044c \u0432\u044b\u0438\u0433\u0440\u044b\u0448, \u0432 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435. \u041d\u043e \u0432 \u0446\u0435\u043b\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u0445\u043e\u0436, \u0445\u043e\u0442\u044f \u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043b\u0443\u0447\u0448\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u0414\u0443\u043c\u0430\u044e, \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u0433\u0434\u0435 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u044c.<\/p>\n<p>  <\/p>\n<p>\u0418\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435<\/p>\n<p>  <\/p>\n<h3 id=\"opredelenie-blizhayshego-predyduschego-sobytiya\">\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f<\/h3>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<thead>\n<tr>\n<th>Method<\/th>\n<th>Pattern<\/th>\n<th>DateString<\/th>\n<th>Mean<\/th>\n<th>Error<\/th>\n<th>StdDev<\/th>\n<th>Ratio<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>FindPrevOld<\/td>\n<td><em>.<\/em>.1 0:0:0<\/td>\n<td>2001-01-01<\/td>\n<td>18,665.30 ns<\/td>\n<td>319.700 ns<\/td>\n<td>283.405 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>FindPrevNewCopypasted<\/td>\n<td><em>.<\/em>.1 0:0:0<\/td>\n<td>2001-01-01<\/td>\n<td>17,179.13 ns<\/td>\n<td>341.540 ns<\/td>\n<td>607.086 ns<\/td>\n<td>0.91<\/td>\n<\/tr>\n<tr>\n<td>FindPrevNewTypelevel<\/td>\n<td><em>.<\/em>.1 0:0:0<\/td>\n<td>2001-01-01<\/td>\n<td>16,855.01 ns<\/td>\n<td>257.361 ns<\/td>\n<td>240.735 ns<\/td>\n<td>0.90<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>FindPrevOld<\/td>\n<td><em>.<\/em>.1 0:0:0<\/td>\n<td>2080-05-05<\/td>\n<td>15,755.87 ns<\/td>\n<td>301.288 ns<\/td>\n<td>370.008 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>FindPrevNewCopypasted<\/td>\n<td><em>.<\/em>.1 0:0:0<\/td>\n<td>2080-05-05<\/td>\n<td>15,346.73 ns<\/td>\n<td>300.132 ns<\/td>\n<td>390.256 ns<\/td>\n<td>0.97<\/td>\n<\/tr>\n<tr>\n<td>FindPrevNewTypelevel<\/td>\n<td><em>.<\/em>.1 0:0:0<\/td>\n<td>2080-05-05<\/td>\n<td>15,106.44 ns<\/td>\n<td>300.014 ns<\/td>\n<td>357.146 ns<\/td>\n<td>0.96<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>FindPrevOld<\/td>\n<td>*.4.6(&#8230;)-20\/3<\/td>\n<td>2001-01-01<\/td>\n<td>3,331.73 ns<\/td>\n<td>65.306 ns<\/td>\n<td>84.916 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>FindPrevNewCopypasted<\/td>\n<td>*.4.6(&#8230;)-20\/3<\/td>\n<td>2001-01-01<\/td>\n<td>9,366.22 ns<\/td>\n<td>114.040 ns<\/td>\n<td>101.093 ns<\/td>\n<td>2.82<\/td>\n<\/tr>\n<tr>\n<td>FindPrevNewTypelevel<\/td>\n<td>*.4.6(&#8230;)-20\/3<\/td>\n<td>2001-01-01<\/td>\n<td>9,558.23 ns<\/td>\n<td>183.513 ns<\/td>\n<td>188.454 ns<\/td>\n<td>2.87<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>FindPrevOld<\/td>\n<td>*.4.6(&#8230;)-20\/3<\/td>\n<td>2080-05-05<\/td>\n<td>2,825.13 ns<\/td>\n<td>38.673 ns<\/td>\n<td>36.175 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>FindPrevNewCopypasted<\/td>\n<td>*.4.6(&#8230;)-20\/3<\/td>\n<td>2080-05-05<\/td>\n<td>9,586.06 ns<\/td>\n<td>190.697 ns<\/td>\n<td>441.970 ns<\/td>\n<td>3.31<\/td>\n<\/tr>\n<tr>\n<td>FindPrevNewTypelevel<\/td>\n<td>*.4.6(&#8230;)-20\/3<\/td>\n<td>2080-05-05<\/td>\n<td>9,244.82 ns<\/td>\n<td>181.060 ns<\/td>\n<td>185.935 ns<\/td>\n<td>3.27<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>FindPrevOld<\/td>\n<td><em>.9.<\/em>(&#8230;)0.000<\/td>\n<td>2001-01-01<\/td>\n<td>14,793.93 ns<\/td>\n<td>270.777 ns<\/td>\n<td>253.285 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>FindPrevNewCopypasted<\/td>\n<td><em>.9.<\/em>(&#8230;)0.000<\/td>\n<td>2001-01-01<\/td>\n<td>15,019.59 ns<\/td>\n<td>286.670 ns<\/td>\n<td>341.261 ns<\/td>\n<td>1.02<\/td>\n<\/tr>\n<tr>\n<td>FindPrevNewTypelevel<\/td>\n<td><em>.9.<\/em>(&#8230;)0.000<\/td>\n<td>2001-01-01<\/td>\n<td>16,325.45 ns<\/td>\n<td>320.146 ns<\/td>\n<td>393.168 ns<\/td>\n<td>1.11<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>FindPrevOld<\/td>\n<td><em>.9.<\/em>(&#8230;)0.000<\/td>\n<td>2080-05-05<\/td>\n<td>15,135.30 ns<\/td>\n<td>293.223 ns<\/td>\n<td>411.058 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>FindPrevNewCopypasted<\/td>\n<td><em>.9.<\/em>(&#8230;)0.000<\/td>\n<td>2080-05-05<\/td>\n<td>15,041.15 ns<\/td>\n<td>281.947 ns<\/td>\n<td>276.910 ns<\/td>\n<td>0.98<\/td>\n<\/tr>\n<tr>\n<td>FindPrevNewTypelevel<\/td>\n<td><em>.9.<\/em>(&#8230;)0.000<\/td>\n<td>2080-05-05<\/td>\n<td>14,010.77 ns<\/td>\n<td>259.528 ns<\/td>\n<td>277.692 ns<\/td>\n<td>0.92<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>FindPrevOld<\/td>\n<td>2000.(&#8230;)9.999<\/td>\n<td>2001-01-01<\/td>\n<td>119.83 ns<\/td>\n<td>2.358 ns<\/td>\n<td>3.066 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>FindPrevNewCopypasted<\/td>\n<td>2000.(&#8230;)9.999<\/td>\n<td>2001-01-01<\/td>\n<td>73.59 ns<\/td>\n<td>1.540 ns<\/td>\n<td>3.778 ns<\/td>\n<td>0.64<\/td>\n<\/tr>\n<tr>\n<td>FindPrevNewTypelevel<\/td>\n<td>2000.(&#8230;)9.999<\/td>\n<td>2001-01-01<\/td>\n<td>84.58 ns<\/td>\n<td>1.569 ns<\/td>\n<td>1.391 ns<\/td>\n<td>0.70<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>FindPrevOld<\/td>\n<td>2000.(&#8230;)9.999<\/td>\n<td>2080-05-05<\/td>\n<td>2,261.26 ns<\/td>\n<td>44.415 ns<\/td>\n<td>52.872 ns<\/td>\n<td>1.00<\/td>\n<\/tr>\n<tr>\n<td>FindPrevNewCopypasted<\/td>\n<td>2000.(&#8230;)9.999<\/td>\n<td>2080-05-05<\/td>\n<td>2,202.63 ns<\/td>\n<td>40.608 ns<\/td>\n<td>33.910 ns<\/td>\n<td>0.98<\/td>\n<\/tr>\n<tr>\n<td>FindPrevNewTypelevel<\/td>\n<td>2000.(&#8230;)9.999<\/td>\n<td>2080-05-05<\/td>\n<td>2,456.63 ns<\/td>\n<td>48.368 ns<\/td>\n<td>47.504 ns<\/td>\n<td>1.09<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <\/p>\n<p>\u0422\u0443\u0442 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0441\u0445\u043e\u0436\u0438\u0435 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u043f\u0443\u043d\u043a\u0442\u043e\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u0445\u043e\u0442\u044f \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u043d\u043f\u0443\u0442\u0430\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 2 \u0440\u0430\u0437\u0430, \u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435. \u0412\u0438\u0434\u0438\u043c\u043e, \u044d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435\u043c \u0432 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0442\u043a\u0430\u0442\u0435 \u043d\u0430 \u043f\u043e\u0438\u0441\u043a \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430. <\/p>\n<p>  <\/p>\n<p>\u0421 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043a\u0441\u0442\u0430\u0442\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u043e\u0434\u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f: \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0442\u0430\u0439\u043f\u043b\u0435\u0432\u0435\u043b \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u043b\u043e\u0441\u044c \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u043f\u0440\u044f\u043c\u043e\u043c \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u0414\u0430 \u0438 \u0434\u0430\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 \u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043b \u2014 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u2014 \u043f\u0440\u044f\u043c\u043e\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u0431\u044b\u043b \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u2014 \u0432 10 \u0440\u0430\u0437 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0443 \u0434\u043d\u0435\u0439 \u043f\u0440\u043e\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u044f \u043a\u043e\u0434 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u0448\u0435\u043b, \u0432 \u0447\u0435\u043c \u0436\u0435 \u043a\u043e\u0441\u044f\u043a. \u0412\u043e\u0442 <a href=\"https:\/\/github.com\/Pzixel\/TestApp\/commit\/5b87c572d44389e736189f799c416ccb0d333214\" rel=\"nofollow noopener noreferrer\">\u0444\u0438\u043a\u0441<\/a>(\u0430 \u0437\u0430\u0442\u0435\u043c <a href=\"https:\/\/github.com\/Pzixel\/TestApp\/commit\/9bb1998753583215a3372c1d66a4ebfc019d76f8\" rel=\"nofollow noopener noreferrer\">\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0444\u0438\u043a\u0441<\/a>), \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u0430 \u2014 \u0437\u043b\u043e.<\/p>\n<p>  <\/p>\n<h2 id=\"itogi-sravneniya-s-originalnym-kodom\">\u0418\u0442\u043e\u0433\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c<\/h2>\n<p>  <\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u043e\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u044b\u0448\u0435, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u0432\u043e \u0432\u0441\u0435\u0445 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0432\u0430\u0436\u043d\u044b\u043c\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041a\u043e\u0434 \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0435\u0442 SRP: \u0435\u0441\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0441\u0432\u043e\u044e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c. \u042e\u043d\u0438\u043a\u0441-\u0432\u0435\u0439, \u0432\u0441\u0435 \u0434\u0435\u043b\u0430. \u041f\u0430\u0440\u0441\u0435\u0440 \u043f\u0430\u0440\u0441\u0438\u0442, \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0442 \u0442\u043e, \u0447\u0442\u043e \u0438\u043c \u043d\u0443\u0436\u043d\u043e, \u0430 \u043d\u0435 \u0442\u043e \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043a\u043e\u043c\u0443-\u0442\u043e (\u043a\u043e\u043c\u0443 \u043d\u0430\u0434\u043e \u2014 \u0442\u043e\u0442 \u0441\u043c\u0430\u043f\u043f\u0438\u0442)<\/li>\n<li>\u041a\u043e\u0434 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0440\u0443\u0435\u043c: \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439, \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u2014 \u0432\u0441\u0435 \u044d\u0442\u043e \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441 \u0431\u0443\u043b\u0435\u0432\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u043d\u0430 \u043a\u0430\u043a\u0438\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u0434\u0435\u0440\u0435\u0432\u044c\u044f \u043a\u0430\u043a \u0432 Quartz, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u04310\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043c\u0435\u043d\u044f\u0442\u044c \u0432\u043e\u043e\u0431\u0449\u0435<\/li>\n<li>\u041a\u043e\u0434 \u0447\u0438\u0442\u0430\u0435\u043c: \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c. \u041d\u0443\u0436\u0435\u043d \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u2014 \u043f\u043e\u0448\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 50 \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u0442\u0443\u0442, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u043a\u0430\u043a \u043c\u0430\u043f\u043f\u0438\u0442\u0441\u044f \u2014 20 \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u0442\u0430\u043c, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0438\u0449\u0435\u043c \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u2014 \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0449\u0435, \u0432\u043e\u0442 \u0435\u0449\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434, \u0447\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u044f \u043e\u0441\u0438\u043b\u0438\u043b \u043d\u0435 \u0441\u0440\u0430\u0437\u0443, \u0438 \u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0441 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u043e\u043c \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0432\u0435\u0440\u043d\u0443\u043b \u2014 \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044d\u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043a\u0440\u0443\u0442\u043e \u0434\u043b\u044f \u043c\u0435\u043d\u044f)<br \/> \n<ul>\n<li>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0447\u0443 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u043e\u0438\u0441\u043a\u0430 \u0431\u0435\u0437 \u0442\u0440\u0438\u043b\u043b\u0438\u043e\u043d\u0430 if \u2014 \u043f\u043e\u0447\u0443\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435 \u0441\u0430\u043c\u0438, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u043b\u0438\u043a\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u0438<\/li>\n<\/ul>\n<\/li>\n<li>\u0421\u0442\u0440\u0430\u043d\u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u044d\u0442\u043e \u0432 2021 \u0433\u043e\u0434\u0443, \u043d\u043e \u043d\u0435\u0442 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442: \u0432\u0441\u0435 \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u043e \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0432 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 (\u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0441 \u044d\u0442\u0438\u043c \u0431\u044b\u043b\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0435\u0447\u0430\u043b\u044c\u043d\u043e)<\/li>\n<li>\u0414\u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0442\u0435\u0441\u0442\u044b \u043d\u0430 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043a\u0435\u0439\u0441\u044b \u2014 \u0442\u043e, \u0447\u0435\u0433\u043e \u043a\u0441\u0442\u0430\u0442\u0438 \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u0430\u0432\u0442\u043e\u0440\u0443. \u0422\u043e \u0447\u0442\u043e \u043c\u044b \u043f\u0430\u0440\u0441\u0438\u043c \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u2014 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0435\u0449\u0451 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0447\u0442\u043e \u043d\u0435 \u043f\u0430\u0440\u0441\u0438\u043c \u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e<\/li>\n<li>\u0415\u0441\u0442\u044c \u043f\u043e\u0432\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u043d\u0430\u0434\u044b: \u0431\u0435\u0437 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \ud83d\ude42<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041d\u0443 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u0438 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u0434\u0435\u043b\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0435 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0436\u0435\u0441\u0442\u043a\u043e\u0433\u043e \u043b\u0438\u043c\u0438\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0442.\u043a. \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0434\u043d\u0438 \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044e \u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u043c:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0423\u0431\u0440\u0430\u0442\u044c <code>int.Parse(new String(char[]))<\/code>: \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e, \u0433\u0434\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u044e\u0442\u0441\u044f \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0438 \u043c\u043d\u043e\u0433\u043e \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439<\/li>\n<li>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0434\u0435\u0439\u0442\u0442\u0430\u0439\u043c\u0430\u043c\u0438: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b TicksPerDay\/TicksPerHour\/\u2026 \u0438 \u0431\u0438\u0442\u043e\u0432\u044b\u0435\/\u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0441\u0435\u043a\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0434\u0430\u0442\u044b. \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b \u0434\u0430\u0442\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u0447\u0442\u043e \u043e\u043d\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b. \u041c\u043e\u0436\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c<\/li>\n<li>\u041b\u0443\u0447\u0448\u0438\u0439 \u043d\u0435\u0439\u043c\u0438\u043d\u0433<\/li>\n<li>\u0411\u043e\u043b\u044c\u0448\u0435 \u0442\u0435\u0441\u0442\u043e\u0432<\/li>\n<li>\u0411\u043e\u043b\u0435\u0435 \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0434\u043b\u044f \u043a\u0440\u0430\u0435\u0432\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432<\/li>\n<li>\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u044d\u043a\u0441\u0435\u043f\u0448\u043d\u044b \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u043a\u0438\u0434\u0430\u044e\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043e\u0431\u0449\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 (\u043d\u0430\u0432\u0440\u043e\u0434\u0435 OutOfBoundsException)<\/li>\n<li>\u0422\u044b\u0441\u044f\u0447\u0438 \u0438\u0445<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"para-slov-o-kommentariyah-k-originalnoy-state\">\u041f\u0430\u0440\u0430 \u0441\u043b\u043e\u0432 \u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/h2>\n<p>  <\/p>\n<p>\u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0435\u0449\u0451 \u043f\u0440\u043e\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u044b \u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435:<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/users\/nirom\/\" class=\"user_link\">nirom<\/a><\/p>\n<p>  <\/p>\n<blockquote><p>\u0427\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u043d\u0438 \u043e \u0447\u0435\u043c. \u0412\u0438\u0434\u0438\u043c\u043e \u0438\u0449\u0443\u0442 \u0434\u0436\u0443\u043d\u0430, \u0447\u0442\u043e\u0431\u044b \u0432\u0430\u043b\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0433\u043e \u043a\u043e\u0441\u044f\u043a\u0438 \u0438 \u043f\u0435\u043d\u0430\u0442\u044c \u0435\u0433\u043e \u0431\u0435\u0437 \u043f\u043e\u0432\u043e\u0434\u0430, \u0432\u044b \u043d\u0435 \u043f\u043e\u0434\u043e\u0448\u043b\u0438, \u043d\u0435 \u0440\u0430\u0441\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0439\u0442\u0435\u0441\u044c.<\/p><\/blockquote>\n<p>\u0417\u0430\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435, \u043a\u0430\u043a \u043d\u0430 \u0434\u0436\u0443\u043d\u0430 \u0442\u0430\u043a \u0438 \u043d\u0430 \u0441\u0435\u043d\u0438\u043e\u0440\u0430: \u043f\u0440\u043e\u0441\u0442\u043e \u0443 \u043d\u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f. \u0414\u0430 \u0438 \u0432\u0440\u044f\u0434 \u043b\u0438 \u0434\u0436\u0443\u043d \u043e\u0441\u0438\u043b\u0438\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u2014 \u0437\u0430\u043f\u0443\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0437\u0430 \u0447\u0435\u043c \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u0434\u0442\u0438. \u0425\u043e\u0442\u044f \u0438 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e\u0433\u043e \u0441\u0435\u043d\u0438\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b \u0441\u0442\u0430\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u0435\u0449\u0451 \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c. \u042f \u043b\u0438\u0447\u043d\u043e \u0434\u0435\u043b\u0430\u044e, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043c\u0435\u043d\u044f \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0417\u0430\u0434\u0430\u0447\u043a\u0443 \u043a\u0430\u043a \u0443 \u0430\u0432\u0442\u043e\u0440\u0430 \u044f \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0431\u044b, \u0431\u0443\u0434\u044c \u044d\u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u0438\u043b\u044b, \u0430 \u0434\u043b\u044f \u0442\u0440\u0443\u0434\u043e\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0412 \u043e\u0431\u0449\u0435\u043c, \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0432 \u0446\u0435\u043b\u043e\u043c \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0432\u0430\u0442\u043e\u0435: \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u0434\u043b\u044f \u0434\u0436\u0443\u043d\u0430, \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043e\u043b\u0433\u043e\u0435 \u0434\u043b\u044f \u0441\u0435\u043d\u0438\u043e\u0440\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043e\u043d\u0438 \u0438\u0441\u043a\u0430\u043b\u0438 \u043a\u0440\u0435\u043f\u043a\u043e\u0433\u043e \u043c\u0438\u0434\u0434\u043b\u0430 \u0431\u0435\u0437 \u043e\u0441\u043e\u0431\u044b\u0445 \u0430\u043c\u0431\u0438\u0446\u0438\u0439, \u043d\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u0443\u0436\u0435 \u043d\u0435 \u0443\u0437\u043d\u0430\u0435\u043c.<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/users\/hydro\/\" class=\"user_link\">Hydro<\/a><\/p>\n<p>  <\/p>\n<blockquote><p>\u041b\u0435\u043d\u044c \u0431\u044b\u043b\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u0434 \u0434\u043e \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f, \u043d\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0435\u0441\u0442\u044c \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0434\u043e\u0431\u0440\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0430\u043c\u0438.<\/p><\/blockquote>\n<p>\u041e\u043f\u044f\u0442\u044c \u0436\u0435, \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043d\u0430 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0430\u0445 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f <em>\u0441\u0434\u0435\u043b\u0430\u0442\u044c<\/em> \u0437\u0430\u0434\u0430\u043d\u0438\u0435, \u0442\u043e <em>\u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c<\/em> \u0435\u0433\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u2014 \u043d\u0430 \u043c\u043e\u0435\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043f\u0440\u043e\u0449\u0435 \u0432\u044b\u043a\u0438\u043d\u0443\u0442\u044c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0443 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e, \u0447\u0435\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0442\u0430\u0440\u043e\u0439) \u0418 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u0440\u043e\u0439 \u0438\u043c\u0435\u043b\u043e\u0441\u044c \u0432 \u0432\u0438\u0434\u0443. \u0418 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438, \u043a\u0430\u043a \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0443 \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/p>\n<p>  <\/p>\n<pre><code class=\"cs\">var result = FullFormatParser.ParseOrThrow(\"asfas.01.01 00:00:00.000\"); \/\/ Parse error. \/\/     unexpected a \/\/     expected \"*\", or digit \/\/     at line 1, col 1<\/code><\/pre>\n<p>  <\/p>\n<p>\u0441 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0430\u043c\u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/users\/sepulkary\/\" class=\"user_link\">sepulkary<\/a><\/p>\n<p>  <\/p>\n<blockquote><p>\u0418, \u0447\u0442\u043e\u0431\u044b \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u043d\u0435 \u0432\u0441\u0442\u0430\u0432\u0430\u0442\u044c, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f; \u0432\u043e\u043f\u0440\u043e\u0441 \u043a \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u2014 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u0437\u0430\u0447\u0435\u043c \u0437\u0434\u0435\u0441\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440, \u0432\u0438\u0436\u0443 \u043c\u0435\u0441\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0432\u0440\u0435\u043c\u044f \u0438 \u0441\u0442\u0440\u043e\u043a\u0443 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044f, \u043e\u0442\u0434\u0430\u0432\u0430\u044f \u0432\u0440\u0435\u043c\u044f, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0435\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044e. static \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0432\u0440\u043e\u0434\u0435 \u0437\u0434\u0435\u0441\u044c \u0432\u043f\u043e\u043b\u043d\u0435 \u043a \u043c\u0435\u0441\u0442\u0443, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043f\u0440\u044f\u043c\u043e \u0441 \u0447\u0438\u0441\u0442\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438<\/p><\/blockquote>\n<p>\u041a\u0430\u043a \u0431\u044b\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0435 \u0432\u044b\u0448\u0435, \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 18 \u043c\u043a\u0441, \u0430 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0443\u0436\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u043c\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e \u2014 200\u043d\u0441, \u0442.\u0435. \u043d\u0430 2 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0445 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u043c\u0435\u043d\u044c\u0448\u0435. \u0421\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u2014 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438 \u043f\u043e \u043b\u043e\u0433\u0438\u043a\u0435-\u0442\u043e \u0432\u0440\u044f\u0434 \u043b\u0438 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u0443\u044e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u2014 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e.<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/users\/geoser\/\" class=\"user_link\">geoser<\/a><\/p>\n<p>  <\/p>\n<blockquote><p>\u041f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412\u044b \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043b\u0438 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e. \u041c\u043e\u0433\u043b\u0438 \u0431\u044b \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c Builder, Strategy, Singleton, Factory method, \u0445\u043e\u0442\u044c \u0447\u0442\u043e-\u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e \u0431\u044b \u0432\u0430\u0448 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430\u043c\u0438.<\/p><\/blockquote>\n<p>\u041d\u0435\u0442, \u043d\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u2014 \u0432 \u044d\u0442\u043e\u043c \u0437\u0430\u0434\u0430\u043d\u0438\u0438 \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432, \u0445\u043e\u0442\u044f \u0431\u044b \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 \u0442\u0443\u0442 \u0438 \u043d\u0435 \u043f\u0430\u0445\u043d\u0435\u0442: \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u0430\u0440\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u041d\u0430\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0442\u0443\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u2014 \u044d\u0442\u043e \u0438\u0434\u0442\u0438 \u043f\u043e \u043f\u0443\u0442\u0438 <a href=\"https:\/\/github.com\/EnterpriseQualityCoding\/FizzBuzzEnterpriseEdition\" rel=\"nofollow noopener noreferrer\">FizzBuzzEnterpriseEdition<\/a>. \u0415\u0441\u043b\u0438 \u0431\u044b \u044f \u0434\u0430\u0432\u0430\u043b \u0442\u0430\u043a\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0438 \u0443\u0432\u0438\u0434\u0435\u043b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b, \u0442\u043e \u044f \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0432\u044b\u0432\u043e\u0434: &#171;\u0417\u043d\u0430\u0435\u0442 \u043f\u0440\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b, \u043d\u043e \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u0438\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f&#187;. \u041d\u0430\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0442\u044b \u0435\u0433\u043e \u0437\u043d\u0430\u0435\u0448\u044c \u2014 \u0430\u043d\u0442\u0438\u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435.<\/p>\n<p>  <\/p>\n<h2 id=\"zaklyuchenie\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u044b\u043b\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u0430. \u042f \u043d\u0438 \u0432 \u043a\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u044e \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u043b\u0443\u0447\u0448\u0435\u0435 (\u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0435) \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043d\u043e \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u044e \u044d\u0442\u0438\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u2014 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u0440\u0438\u0441\u0442\u043e\u0439\u043d\u043e\u0435, \u0438 \u0431\u043e\u043b\u0435\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043f\u043e \u0432\u0430\u0436\u043d\u044b\u043c \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u043c, \u043a\u0430\u043a \u0442\u043e: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0441\u0442\u044c, \u0447\u0438\u0441\u0442\u043e\u0442\u0430, \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430,\u2026 \u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0437\u0430 ~6-8 \u0447\u0430\u0441\u043e\u0432, \u0442.\u0435. \u043e\u043a\u043e\u043b\u043e \u0442\u043e\u0433\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b \u0430\u0432\u0442\u043e\u0440: \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 4 \u0447\u0430\u0441\u0430 \u044f \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u0441 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u043e\u043c, \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0435 \u0430\u043f\u0438 \u2014 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u044f. \u041c\u043d\u0435 \u0432\u0430\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0442\u0435\u0445 \u0436\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439, \u0447\u0442\u043e \u0438 \u0430\u0432\u0442\u043e\u0440. \u041f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u044d\u0442\u043e\u0433\u043e \u044f \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u0437\u0438\u0441\u043e\u0432:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u043c\u043e\u043d\u0430\u0434\u044b \u2014 \u044d\u0442\u043e \u043a\u0440\u0443\u0442\u043e \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u043e. \u0414\u0443-\u043d\u043e\u0442\u0430\u0446\u2026 \u043f\u0440\u043e\u0441\u0442\u0438\u0442\u0435, LINQ-\u0441\u0438\u0442\u0430\u043a\u0441\u0438\u0441 \u2014 \u043a\u0440\u0430\u0439\u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439. \u041d\u0435 IEnumerable \u0435\u0434\u0438\u043d\u044b\u043c \u0436\u0438\u0432\u044b<\/li>\n<li>\u0433\u043e\u0443\u0442\u0443 \u043a\u0430\u043a \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0434\u0430\u0436\u0435 \u0432 2021 \u0433\u043e\u0434\u0443 \u0432 \u043a\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0436\u0430\u0442\u044c \u043f\u0435\u0440\u0444\u043e\u0440\u043c\u0430\u043d\u0441 (\u0437\u0430\u0431\u0430\u0432\u043d\u043e \u0431\u044b\u043b\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0435\u0433\u043e \u0436\u0435 \u0432 NCrontab \u2014 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043f\u0440\u0438\u0448\u043b\u0438 \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u0441 \u0435\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438)<\/li>\n<li>\u0442\u0430\u043a-\u0441\u0435\u0431\u0435-\u043a\u043e\u0434 \u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0434\u043e\u043b\u0433\u043e, \u043d\u043e \u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043d\u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u0435\u0435 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c, \u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0442\u044c \u0441 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438. \u041f\u0440\u0430\u0432\u0434\u0430, \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u043e\u043f\u044b\u0442, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0438\u0437 \u0447\u0435\u0433\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u2014 \u0447\u0442\u043e\u0431\u044b \u0432\u0437\u044f\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e \u0435\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c.<\/li>\n<li>\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u2014 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0430\u043f\u0448\u0430 \u0438\u0437 \u0438\u0444\u043e\u0432, \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u0437 \u0441\u0442\u0434. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0435\u0440\u0444\u043e\u0440\u043c\u0430\u043d\u0441 \u0432 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u0445, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0432 \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/li>\n<li><a href=\"https:\/\/docs.scala-lang.org\/tour\/implicit-parameters.html\" rel=\"nofollow noopener noreferrer\">\u0418\u043c\u043f\u043b\u0438\u0441\u0438\u0442\u044b<\/a> (YearChanger\/MonthChanger\/&#8230;, \u0445\u043e\u0442\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0448\u0430\u0440\u043f\u0430 \u043e\u043d\u0438 \u0441\u043a\u043e\u0440\u0435\u0435 \u044d\u043a\u0441\u043f\u043b\u0438\u0441\u0438\u0442\u044b, \u0445\u0435\u0445) \u2014 \u0432\u0430\u0448\u0438 \u0434\u0440\u0443\u0437\u044c\u044f. \u041f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0438\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c zero-cost \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u0438\u0437\u043c \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0422\u0430\u043a\u0436\u0435 \u043e\u043d\u0438 \u0431\u044b\u0432\u0430\u044e\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438. <a href=\"https:\/\/github.com\/dotnet\/csharplang\/discussions\/164\" rel=\"nofollow noopener noreferrer\">\u0421\u043a\u043e\u0440\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0442\u0438\u0432\u043d\u043e \u0432 \u044f\u0437\u044b\u043a\u0435<\/a>, \u0430 \u043f\u043e\u043a\u0430 \u2014 \u043d\u0443 \u0432\u043e\u0442 \u0442\u0430\u043a.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>Upd. \u0421\u043e\u0432\u0441\u0435\u043c \u0437\u0430\u0431\u044b\u043b \u043f\u0440\u0438\u043b\u043e\u0436\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439: <a href=\"https:\/\/github.com\/Pzixel\/TestApp\" rel=\"nofollow noopener noreferrer\">https:\/\/github.com\/Pzixel\/TestApp<\/a><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/572052\/\"> https:\/\/habr.com\/ru\/articles\/572052\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/cc\/vu\/xt\/ccvuxttktlmr2fuq4njrtradyow.png\" data-src=\"https:\/\/habrastorage.org\/webt\/cc\/vu\/xt\/ccvuxttktlmr2fuq4njrtradyow.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442, \u044d\u0442\u043e <a href=\"https:\/\/habr.com\/ru\/users\/psyhaste\/\" class=\"user_link\">PsyHaSTe<\/a> \u0438 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0443\u0434\u0430 \u043c\u0435\u043d\u044f \u0437\u0430\u043d\u0435\u0441\u043b\u0430 \u043d\u0435\u043b\u0435\u0433\u043a\u0430\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043a\u043e\u0434\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0430 <a href=\"https:\/\/habr.com\/ru\/users\/novar\/\" class=\"user_link\">novar<\/a> (\u043a\u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b \u2014 <a href=\"https:\/\/habr.com\/ru\/post\/571342\/\">\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f<\/a>). \u041a\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0431\u044b\u043b\u0438 \u0443 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f? \u041f\u043e\u0447\u0435\u043c\u0443 \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443 \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0438 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435? \u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441 \u044d\u0442\u0438\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c? \u041e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u044d\u0442\u0438 \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043b\u0438\u043d\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f \u0438 \u0432\u044b\u043b\u0438\u043b\u0438\u0441\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u044e \u0441 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u043c \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c, \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0438 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0437\u0430\u0434\u0430\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043a\u0442\u043e \u0432 \u0437\u0434\u0440\u0430\u0432\u043e\u043c \u0443\u043c\u0435 \u043c\u043e\u0433 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0441\u043e\u0447\u0435\u0442\u0430\u044e\u0449\u0438\u0439 \u043c\u043e\u043d\u0430\u0434\u044b \u0441 goto, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b \u043e\u0431\u044a\u0435\u043c \u043a\u043e\u0434\u0430 \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b \u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0442\u043e \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442. \u0418, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0441\u0430\u043c\u043e\u0435 \u0432\u043a\u0443\u0441\u043d\u043e\u0435, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0435 \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\u043c\u0438 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0440\u0430\u0431\u043e\u0442\u044b JIT \u2014 \u0432 \u043a\u043e\u043d\u0446\u0435. \u0418\u0442\u043e\u0433\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435 <a href=\"https:\/\/github.com\/Pzixel\/TestApp\" rel=\"nofollow noopener noreferrer\">\u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-410474","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/410474","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=410474"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/410474\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=410474"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=410474"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=410474"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}