Replaced calls to DateTime.Now with DateTime.UtcNow to be locale agnostic - #133

Merged
TomFinley merged 6 commits into
dotnet:masterfrom
Sorrien:master
May 12, 2018
Merged

Replaced calls to DateTime.Now with DateTime.UtcNow to be locale agnostic#133
TomFinley merged 6 commits into
dotnet:masterfrom
Sorrien:master

Conversation

@Sorrien

Copy link
Copy Markdown
Contributor

The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic.
Fixes#110

The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic.
@dnfclas

dnfclas commented May 11, 2018

Copy link
Copy Markdown

CLA assistant check
All CLA requirements met.

Ivanidzo4ka
Ivanidzo4ka previously approved these changes May 11, 2018

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@TomFinley

Copy link
Copy Markdown
Contributor

Thanks so much @Sorrien ! Just requesting @KrzysztofCwalina take a peek to see if it does what he intends. :)

@Ivanidzo4ka
Ivanidzo4ka dismissed their stale reviewMay 11, 2018 19:24

revoking review

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

https://github.com/dotnet/machinelearning/blob/master/src/Microsoft.ML.Core/Data/DateTime.cs#L204
I think that part need to be changed to dto.UtcDateTime as well.

@Ivanidzo4ka

Ivanidzo4ka commented May 11, 2018

Copy link
Copy Markdown
Contributor

Thank you @Sorrien


In reply to: 388462991 [](ancestors = 388462991)

Ivanidzo4ka
Ivanidzo4ka previously approved these changes May 11, 2018

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

Should I be concerned about the Windows_NT Release? If so, how can I learn more about what went wrong? It says access denied when I click "details."

@sharwell

Copy link
Copy Markdown
Contributor

❔ Is there any way to switch the code to using DateTimeOffset (which is comparable even in different time zones)?

@Ivanidzo4ka

Ivanidzo4ka commented May 11, 2018

Copy link
Copy Markdown
Contributor

We apparently have issue which related with random seed and amount of threads in our tests, so it's not problem on your side. I will open issue regarding that, meanwhile, best i can suggest is retrigger build by adding space somewhere.

Regression
.Microsoft.ML.Scenarios.ScenariosTests.TrainAndPredictIrisModelWithStringLabelTest (from MSTestSuite)

Последняя 1 сборка провалились (С Провалилось#588 )
Заняло 0.46 секунд.
добавить описание
Стек вызовов
MESSAGE:
Assert.Equal() Failure
Expected: 1 (rounded from 1)
Actual: 0.99 (rounded from 0.994781792163849)


In reply to: 388466866 [](ancestors = 388466866)

@shauheen

Copy link
Copy Markdown
Contributor

You can simply trigger the tests by asking the @dotnet-bot to test Windows_NT Release please as a comment.

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

@sharwell I am not as familiar with DateTimeOffset but I will look into it.

DateTime.UtcNow is now DateTimeOffset.Now.UtcDateTime
private LassoFit GetLassoFit(IChannel ch, int maxAllowedFeaturesPerModel)
{
DateTime startTime = DateTime.Now;
DateTime startTime = DateTimeOffset.Now.UtcDateTime;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DateTimeOffset.Now.UtcDateTime [](start = 33, length = 30)

Is there are any difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow? If no, why you prefer DateTimeOffset?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've done further research into DateTimeOffset. As I understand it, there is no difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow, but you could access more information from DateTimeOffset like the timezone which would be more useful for storing dates for later. As we are using it here I can't find a difference, so I will undo these changes.

@Ivanidzo4ka
Ivanidzo4ka dismissed their stale reviewMay 11, 2018 20:20

revoking review

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

As you can see in PR we mostly use DateTime.something to output time stamps and get ticks. To represent datetime internally as part of IDataView we use DvDateTime (see DateTime.cs) and we use DateTimeOffset in it.
So I'm not sure DateTimeOffset necessary for this PR


In reply to: 388467246 [](ancestors = 388467246)

@Sorrien

Sorrien commented May 11, 2018

Copy link
Copy Markdown
ContributorAuthor

I've done further research into DateTimeOffset. As I understand it, there is no difference between the result of DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow, but you could access more information from DateTimeOffset like the timezone which would be more useful for storing dates for later. As we are using it here I can't find a difference, so I will undo these changes.

@KrzysztofCwalina

KrzysztofCwalina commented May 11, 2018

Copy link
Copy Markdown
Member

I've done further research into DateTimeOffset. As I understand it, there is no difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow,

@tarekgh, is that your understanding as well? I am under the impression that UtcNow would be faster and more reliable as Now will get time zone info.

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@sharwell

sharwell commented May 11, 2018

Copy link
Copy Markdown
Contributor

As I understand it, there is no difference between the result of DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow

Ah, I was suggesting the use of DateTimeOffset.UtcNow instead of DateTime.UtcNow, and eliminating the use of DateTime altogether. DateTimeOffset is a type that does not suffer from the usage limitations leading to this pull request. If someone decides to use DateTimeOffset.Now and someone else uses DateTimeOffset.UtcNow, and a third person uses DateTimeOffset.Now from a different time zone than the first, everything will work together automatically.

var success = TryValidateOffset(dto.Offset.Ticks, out _offset);
Contracts.Assert(success);
_dateTime = ValidateDate(new DvDateTime(dto.DateTime), ref _offset);
_dateTime = ValidateDate(new DvDateTime(dto.UtcDateTime), ref _offset);

@TomFinleyTomFinleyMay 11, 2018

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

new DvDateTime(dto.UtcDateTime), ref _offset); [](start = 37, length = 46)

Interesting. I don't know that this is correct, singe this DateTimeZone exists to encode a local time including a datetime. So I think that this change here might be inappropriate and is in fact introducing data corruption.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for pointing that out @TomFinley I will revert this change.

@TomFinleyTomFinley left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🕐


TimeSpan duration = DateTime.Now - startTime;
TimeSpan duration = DateTime.UtcNow - startTime;
ch.Info("Elapsed time for compression: {0}", duration);

@TomFinleyTomFinleyMay 11, 2018

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This in particular is a bit weird and doesn't really have an effect I'd think. Probably harmless though, plus UtcNow is much faster anyway so may as well use it.

Honestly this code here ought to have been using stopwatch. #Closed

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right, this has no effect. I have added a stopwatch here instead as per your suggestion

…t removed timezone info where it was actually needed
{
DateTime startTime = DateTime.Now;
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a quick note, not major: Stopwatch.StartNew() is made to serve this common case where you both want to create and start a stopwatch. (Not a blocking comment to be clear, only if you happen to post another iteration for some other reason anyway.)

@TomFinleyTomFinley left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@TomFinley
TomFinley merged commit 5d03b54 into dotnet:masterMay 12, 2018
@tarekgh

Copy link
Copy Markdown
Member

@KrzysztofCwalina

is that your understanding as well? I am under the impression that UtcNow would be faster and more reliable as Now will get time zone info.

Yes, DateTime,UtcNow is faster than DateTimeOffset.Now.

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

Thanks for working with me everyone. I hope to contribute more in the future.

@shauheen

Copy link
Copy Markdown
Contributor

Thanks @Sorrien for your contribution and working through this PR. We look forward to that as well.

eerhardt pushed a commit to eerhardt/machinelearning that referenced this pull request Jul 27, 2018
…stic (dotnet#133)
* Removed calls to DateTime.Now
The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic, except in cases where timezone info is actually needed. Also replaced one starttime measurement with stopwatch.
@ghostghost locked as resolved and limited conversation to collaborators Mar 30, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@Sorrien@dnfclas@TomFinley@Ivanidzo4ka@sharwell@shauheen@KrzysztofCwalina@tarekgh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Replaced calls to DateTime.Now with DateTime.UtcNow to be locale agnostic - #133

Merged
TomFinley merged 6 commits into
dotnet:masterfrom
Sorrien:master
May 12, 2018
Merged

Replaced calls to DateTime.Now with DateTime.UtcNow to be locale agnostic#133
TomFinley merged 6 commits into
dotnet:masterfrom
Sorrien:master

Conversation

@Sorrien

Copy link
Copy Markdown
Contributor

The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic.
Fixes#110

The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic.
@dnfclas

dnfclas commented May 11, 2018

Copy link
Copy Markdown

CLA assistant check
All CLA requirements met.

Ivanidzo4ka
Ivanidzo4ka previously approved these changes May 11, 2018

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@TomFinley

Copy link
Copy Markdown
Contributor

Thanks so much @Sorrien ! Just requesting @KrzysztofCwalina take a peek to see if it does what he intends. :)

@Ivanidzo4ka
Ivanidzo4ka dismissed their stale reviewMay 11, 2018 19:24

revoking review

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

https://github.com/dotnet/machinelearning/blob/master/src/Microsoft.ML.Core/Data/DateTime.cs#L204
I think that part need to be changed to dto.UtcDateTime as well.

@Ivanidzo4ka

Ivanidzo4ka commented May 11, 2018

Copy link
Copy Markdown
Contributor

Thank you @Sorrien


In reply to: 388462991 [](ancestors = 388462991)

Ivanidzo4ka
Ivanidzo4ka previously approved these changes May 11, 2018

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

Should I be concerned about the Windows_NT Release? If so, how can I learn more about what went wrong? It says access denied when I click "details."

@sharwell

Copy link
Copy Markdown
Contributor

❔ Is there any way to switch the code to using DateTimeOffset (which is comparable even in different time zones)?

@Ivanidzo4ka

Ivanidzo4ka commented May 11, 2018

Copy link
Copy Markdown
Contributor

We apparently have issue which related with random seed and amount of threads in our tests, so it's not problem on your side. I will open issue regarding that, meanwhile, best i can suggest is retrigger build by adding space somewhere.

Regression
.Microsoft.ML.Scenarios.ScenariosTests.TrainAndPredictIrisModelWithStringLabelTest (from MSTestSuite)

Последняя 1 сборка провалились (С Провалилось#588 )
Заняло 0.46 секунд.
добавить описание
Стек вызовов
MESSAGE:
Assert.Equal() Failure
Expected: 1 (rounded from 1)
Actual: 0.99 (rounded from 0.994781792163849)


In reply to: 388466866 [](ancestors = 388466866)

@shauheen

Copy link
Copy Markdown
Contributor

You can simply trigger the tests by asking the @dotnet-bot to test Windows_NT Release please as a comment.

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

@sharwell I am not as familiar with DateTimeOffset but I will look into it.

DateTime.UtcNow is now DateTimeOffset.Now.UtcDateTime
private LassoFit GetLassoFit(IChannel ch, int maxAllowedFeaturesPerModel)
{
DateTime startTime = DateTime.Now;
DateTime startTime = DateTimeOffset.Now.UtcDateTime;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DateTimeOffset.Now.UtcDateTime [](start = 33, length = 30)

Is there are any difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow? If no, why you prefer DateTimeOffset?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've done further research into DateTimeOffset. As I understand it, there is no difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow, but you could access more information from DateTimeOffset like the timezone which would be more useful for storing dates for later. As we are using it here I can't find a difference, so I will undo these changes.

@Ivanidzo4ka
Ivanidzo4ka dismissed their stale reviewMay 11, 2018 20:20

revoking review

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

As you can see in PR we mostly use DateTime.something to output time stamps and get ticks. To represent datetime internally as part of IDataView we use DvDateTime (see DateTime.cs) and we use DateTimeOffset in it.
So I'm not sure DateTimeOffset necessary for this PR


In reply to: 388467246 [](ancestors = 388467246)

@Sorrien

Sorrien commented May 11, 2018

Copy link
Copy Markdown
ContributorAuthor

I've done further research into DateTimeOffset. As I understand it, there is no difference between the result of DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow, but you could access more information from DateTimeOffset like the timezone which would be more useful for storing dates for later. As we are using it here I can't find a difference, so I will undo these changes.

@KrzysztofCwalina

KrzysztofCwalina commented May 11, 2018

Copy link
Copy Markdown
Member

I've done further research into DateTimeOffset. As I understand it, there is no difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow,

@tarekgh, is that your understanding as well? I am under the impression that UtcNow would be faster and more reliable as Now will get time zone info.

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@sharwell

sharwell commented May 11, 2018

Copy link
Copy Markdown
Contributor

As I understand it, there is no difference between the result of DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow

Ah, I was suggesting the use of DateTimeOffset.UtcNow instead of DateTime.UtcNow, and eliminating the use of DateTime altogether. DateTimeOffset is a type that does not suffer from the usage limitations leading to this pull request. If someone decides to use DateTimeOffset.Now and someone else uses DateTimeOffset.UtcNow, and a third person uses DateTimeOffset.Now from a different time zone than the first, everything will work together automatically.

var success = TryValidateOffset(dto.Offset.Ticks, out _offset);
Contracts.Assert(success);
_dateTime = ValidateDate(new DvDateTime(dto.DateTime), ref _offset);
_dateTime = ValidateDate(new DvDateTime(dto.UtcDateTime), ref _offset);

@TomFinleyTomFinleyMay 11, 2018

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

new DvDateTime(dto.UtcDateTime), ref _offset); [](start = 37, length = 46)

Interesting. I don't know that this is correct, singe this DateTimeZone exists to encode a local time including a datetime. So I think that this change here might be inappropriate and is in fact introducing data corruption.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for pointing that out @TomFinley I will revert this change.

@TomFinleyTomFinley left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🕐


TimeSpan duration = DateTime.Now - startTime;
TimeSpan duration = DateTime.UtcNow - startTime;
ch.Info("Elapsed time for compression: {0}", duration);

@TomFinleyTomFinleyMay 11, 2018

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This in particular is a bit weird and doesn't really have an effect I'd think. Probably harmless though, plus UtcNow is much faster anyway so may as well use it.

Honestly this code here ought to have been using stopwatch. #Closed

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right, this has no effect. I have added a stopwatch here instead as per your suggestion

…t removed timezone info where it was actually needed
{
DateTime startTime = DateTime.Now;
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a quick note, not major: Stopwatch.StartNew() is made to serve this common case where you both want to create and start a stopwatch. (Not a blocking comment to be clear, only if you happen to post another iteration for some other reason anyway.)

@TomFinleyTomFinley left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@TomFinley
TomFinley merged commit 5d03b54 into dotnet:masterMay 12, 2018
@tarekgh

Copy link
Copy Markdown
Member

@KrzysztofCwalina

is that your understanding as well? I am under the impression that UtcNow would be faster and more reliable as Now will get time zone info.

Yes, DateTime,UtcNow is faster than DateTimeOffset.Now.

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

Thanks for working with me everyone. I hope to contribute more in the future.

@shauheen

Copy link
Copy Markdown
Contributor

Thanks @Sorrien for your contribution and working through this PR. We look forward to that as well.

eerhardt pushed a commit to eerhardt/machinelearning that referenced this pull request Jul 27, 2018
…stic (dotnet#133)
* Removed calls to DateTime.Now
The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic, except in cases where timezone info is actually needed. Also replaced one starttime measurement with stopwatch.
@ghostghost locked as resolved and limited conversation to collaborators Mar 30, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@Sorrien@dnfclas@TomFinley@Ivanidzo4ka@sharwell@shauheen@KrzysztofCwalina@tarekgh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Replaced calls to DateTime.Now with DateTime.UtcNow to be locale agnostic - #133

Merged
TomFinley merged 6 commits into
dotnet:masterfrom
Sorrien:master
May 12, 2018
Merged

Replaced calls to DateTime.Now with DateTime.UtcNow to be locale agnostic#133
TomFinley merged 6 commits into
dotnet:masterfrom
Sorrien:master

Conversation

@Sorrien

Copy link
Copy Markdown
Contributor

The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic.
Fixes#110

The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic.
@dnfclas

dnfclas commented May 11, 2018

Copy link
Copy Markdown

CLA assistant check
All CLA requirements met.

Ivanidzo4ka
Ivanidzo4ka previously approved these changes May 11, 2018

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@TomFinley

Copy link
Copy Markdown
Contributor

Thanks so much @Sorrien ! Just requesting @KrzysztofCwalina take a peek to see if it does what he intends. :)

@Ivanidzo4ka
Ivanidzo4ka dismissed their stale reviewMay 11, 2018 19:24

revoking review

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

https://github.com/dotnet/machinelearning/blob/master/src/Microsoft.ML.Core/Data/DateTime.cs#L204
I think that part need to be changed to dto.UtcDateTime as well.

@Ivanidzo4ka

Ivanidzo4ka commented May 11, 2018

Copy link
Copy Markdown
Contributor

Thank you @Sorrien


In reply to: 388462991 [](ancestors = 388462991)

Ivanidzo4ka
Ivanidzo4ka previously approved these changes May 11, 2018

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

Should I be concerned about the Windows_NT Release? If so, how can I learn more about what went wrong? It says access denied when I click "details."

@sharwell

Copy link
Copy Markdown
Contributor

❔ Is there any way to switch the code to using DateTimeOffset (which is comparable even in different time zones)?

@Ivanidzo4ka

Ivanidzo4ka commented May 11, 2018

Copy link
Copy Markdown
Contributor

We apparently have issue which related with random seed and amount of threads in our tests, so it's not problem on your side. I will open issue regarding that, meanwhile, best i can suggest is retrigger build by adding space somewhere.

Regression
.Microsoft.ML.Scenarios.ScenariosTests.TrainAndPredictIrisModelWithStringLabelTest (from MSTestSuite)

Последняя 1 сборка провалились (С Провалилось#588 )
Заняло 0.46 секунд.
добавить описание
Стек вызовов
MESSAGE:
Assert.Equal() Failure
Expected: 1 (rounded from 1)
Actual: 0.99 (rounded from 0.994781792163849)


In reply to: 388466866 [](ancestors = 388466866)

@shauheen

Copy link
Copy Markdown
Contributor

You can simply trigger the tests by asking the @dotnet-bot to test Windows_NT Release please as a comment.

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

@sharwell I am not as familiar with DateTimeOffset but I will look into it.

DateTime.UtcNow is now DateTimeOffset.Now.UtcDateTime
private LassoFit GetLassoFit(IChannel ch, int maxAllowedFeaturesPerModel)
{
DateTime startTime = DateTime.Now;
DateTime startTime = DateTimeOffset.Now.UtcDateTime;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DateTimeOffset.Now.UtcDateTime [](start = 33, length = 30)

Is there are any difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow? If no, why you prefer DateTimeOffset?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've done further research into DateTimeOffset. As I understand it, there is no difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow, but you could access more information from DateTimeOffset like the timezone which would be more useful for storing dates for later. As we are using it here I can't find a difference, so I will undo these changes.

@Ivanidzo4ka
Ivanidzo4ka dismissed their stale reviewMay 11, 2018 20:20

revoking review

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

As you can see in PR we mostly use DateTime.something to output time stamps and get ticks. To represent datetime internally as part of IDataView we use DvDateTime (see DateTime.cs) and we use DateTimeOffset in it.
So I'm not sure DateTimeOffset necessary for this PR


In reply to: 388467246 [](ancestors = 388467246)

@Sorrien

Sorrien commented May 11, 2018

Copy link
Copy Markdown
ContributorAuthor

I've done further research into DateTimeOffset. As I understand it, there is no difference between the result of DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow, but you could access more information from DateTimeOffset like the timezone which would be more useful for storing dates for later. As we are using it here I can't find a difference, so I will undo these changes.

@KrzysztofCwalina

KrzysztofCwalina commented May 11, 2018

Copy link
Copy Markdown
Member

I've done further research into DateTimeOffset. As I understand it, there is no difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow,

@tarekgh, is that your understanding as well? I am under the impression that UtcNow would be faster and more reliable as Now will get time zone info.

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@sharwell

sharwell commented May 11, 2018

Copy link
Copy Markdown
Contributor

As I understand it, there is no difference between the result of DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow

Ah, I was suggesting the use of DateTimeOffset.UtcNow instead of DateTime.UtcNow, and eliminating the use of DateTime altogether. DateTimeOffset is a type that does not suffer from the usage limitations leading to this pull request. If someone decides to use DateTimeOffset.Now and someone else uses DateTimeOffset.UtcNow, and a third person uses DateTimeOffset.Now from a different time zone than the first, everything will work together automatically.

var success = TryValidateOffset(dto.Offset.Ticks, out _offset);
Contracts.Assert(success);
_dateTime = ValidateDate(new DvDateTime(dto.DateTime), ref _offset);
_dateTime = ValidateDate(new DvDateTime(dto.UtcDateTime), ref _offset);

@TomFinleyTomFinleyMay 11, 2018

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

new DvDateTime(dto.UtcDateTime), ref _offset); [](start = 37, length = 46)

Interesting. I don't know that this is correct, singe this DateTimeZone exists to encode a local time including a datetime. So I think that this change here might be inappropriate and is in fact introducing data corruption.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for pointing that out @TomFinley I will revert this change.

@TomFinleyTomFinley left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🕐


TimeSpan duration = DateTime.Now - startTime;
TimeSpan duration = DateTime.UtcNow - startTime;
ch.Info("Elapsed time for compression: {0}", duration);

@TomFinleyTomFinleyMay 11, 2018

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This in particular is a bit weird and doesn't really have an effect I'd think. Probably harmless though, plus UtcNow is much faster anyway so may as well use it.

Honestly this code here ought to have been using stopwatch. #Closed

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right, this has no effect. I have added a stopwatch here instead as per your suggestion

…t removed timezone info where it was actually needed
{
DateTime startTime = DateTime.Now;
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a quick note, not major: Stopwatch.StartNew() is made to serve this common case where you both want to create and start a stopwatch. (Not a blocking comment to be clear, only if you happen to post another iteration for some other reason anyway.)

@TomFinleyTomFinley left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@TomFinley
TomFinley merged commit 5d03b54 into dotnet:masterMay 12, 2018
@tarekgh

Copy link
Copy Markdown
Member

@KrzysztofCwalina

is that your understanding as well? I am under the impression that UtcNow would be faster and more reliable as Now will get time zone info.

Yes, DateTime,UtcNow is faster than DateTimeOffset.Now.

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

Thanks for working with me everyone. I hope to contribute more in the future.

@shauheen

Copy link
Copy Markdown
Contributor

Thanks @Sorrien for your contribution and working through this PR. We look forward to that as well.

eerhardt pushed a commit to eerhardt/machinelearning that referenced this pull request Jul 27, 2018
…stic (dotnet#133)
* Removed calls to DateTime.Now
The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic, except in cases where timezone info is actually needed. Also replaced one starttime measurement with stopwatch.
@ghostghost locked as resolved and limited conversation to collaborators Mar 30, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@Sorrien@dnfclas@TomFinley@Ivanidzo4ka@sharwell@shauheen@KrzysztofCwalina@tarekgh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Replaced calls to DateTime.Now with DateTime.UtcNow to be locale agnostic - #133

Merged
TomFinley merged 6 commits into
dotnet:masterfrom
Sorrien:master
May 12, 2018
Merged

Replaced calls to DateTime.Now with DateTime.UtcNow to be locale agnostic#133
TomFinley merged 6 commits into
dotnet:masterfrom
Sorrien:master

Conversation

@Sorrien

Copy link
Copy Markdown
Contributor

The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic.
Fixes#110

The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic.
@dnfclas

dnfclas commented May 11, 2018

Copy link
Copy Markdown

CLA assistant check
All CLA requirements met.

Ivanidzo4ka
Ivanidzo4ka previously approved these changes May 11, 2018

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@TomFinley

Copy link
Copy Markdown
Contributor

Thanks so much @Sorrien ! Just requesting @KrzysztofCwalina take a peek to see if it does what he intends. :)

@Ivanidzo4ka
Ivanidzo4ka dismissed their stale reviewMay 11, 2018 19:24

revoking review

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

https://github.com/dotnet/machinelearning/blob/master/src/Microsoft.ML.Core/Data/DateTime.cs#L204
I think that part need to be changed to dto.UtcDateTime as well.

@Ivanidzo4ka

Ivanidzo4ka commented May 11, 2018

Copy link
Copy Markdown
Contributor

Thank you @Sorrien


In reply to: 388462991 [](ancestors = 388462991)

Ivanidzo4ka
Ivanidzo4ka previously approved these changes May 11, 2018

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

Should I be concerned about the Windows_NT Release? If so, how can I learn more about what went wrong? It says access denied when I click "details."

@sharwell

Copy link
Copy Markdown
Contributor

❔ Is there any way to switch the code to using DateTimeOffset (which is comparable even in different time zones)?

@Ivanidzo4ka

Ivanidzo4ka commented May 11, 2018

Copy link
Copy Markdown
Contributor

We apparently have issue which related with random seed and amount of threads in our tests, so it's not problem on your side. I will open issue regarding that, meanwhile, best i can suggest is retrigger build by adding space somewhere.

Regression
.Microsoft.ML.Scenarios.ScenariosTests.TrainAndPredictIrisModelWithStringLabelTest (from MSTestSuite)

Последняя 1 сборка провалились (С Провалилось#588 )
Заняло 0.46 секунд.
добавить описание
Стек вызовов
MESSAGE:
Assert.Equal() Failure
Expected: 1 (rounded from 1)
Actual: 0.99 (rounded from 0.994781792163849)


In reply to: 388466866 [](ancestors = 388466866)

@shauheen

Copy link
Copy Markdown
Contributor

You can simply trigger the tests by asking the @dotnet-bot to test Windows_NT Release please as a comment.

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

@sharwell I am not as familiar with DateTimeOffset but I will look into it.

DateTime.UtcNow is now DateTimeOffset.Now.UtcDateTime
private LassoFit GetLassoFit(IChannel ch, int maxAllowedFeaturesPerModel)
{
DateTime startTime = DateTime.Now;
DateTime startTime = DateTimeOffset.Now.UtcDateTime;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DateTimeOffset.Now.UtcDateTime [](start = 33, length = 30)

Is there are any difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow? If no, why you prefer DateTimeOffset?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've done further research into DateTimeOffset. As I understand it, there is no difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow, but you could access more information from DateTimeOffset like the timezone which would be more useful for storing dates for later. As we are using it here I can't find a difference, so I will undo these changes.

@Ivanidzo4ka
Ivanidzo4ka dismissed their stale reviewMay 11, 2018 20:20

revoking review

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

As you can see in PR we mostly use DateTime.something to output time stamps and get ticks. To represent datetime internally as part of IDataView we use DvDateTime (see DateTime.cs) and we use DateTimeOffset in it.
So I'm not sure DateTimeOffset necessary for this PR


In reply to: 388467246 [](ancestors = 388467246)

@Sorrien

Sorrien commented May 11, 2018

Copy link
Copy Markdown
ContributorAuthor

I've done further research into DateTimeOffset. As I understand it, there is no difference between the result of DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow, but you could access more information from DateTimeOffset like the timezone which would be more useful for storing dates for later. As we are using it here I can't find a difference, so I will undo these changes.

@KrzysztofCwalina

KrzysztofCwalina commented May 11, 2018

Copy link
Copy Markdown
Member

I've done further research into DateTimeOffset. As I understand it, there is no difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow,

@tarekgh, is that your understanding as well? I am under the impression that UtcNow would be faster and more reliable as Now will get time zone info.

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@sharwell

sharwell commented May 11, 2018

Copy link
Copy Markdown
Contributor

As I understand it, there is no difference between the result of DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow

Ah, I was suggesting the use of DateTimeOffset.UtcNow instead of DateTime.UtcNow, and eliminating the use of DateTime altogether. DateTimeOffset is a type that does not suffer from the usage limitations leading to this pull request. If someone decides to use DateTimeOffset.Now and someone else uses DateTimeOffset.UtcNow, and a third person uses DateTimeOffset.Now from a different time zone than the first, everything will work together automatically.

var success = TryValidateOffset(dto.Offset.Ticks, out _offset);
Contracts.Assert(success);
_dateTime = ValidateDate(new DvDateTime(dto.DateTime), ref _offset);
_dateTime = ValidateDate(new DvDateTime(dto.UtcDateTime), ref _offset);

@TomFinleyTomFinleyMay 11, 2018

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

new DvDateTime(dto.UtcDateTime), ref _offset); [](start = 37, length = 46)

Interesting. I don't know that this is correct, singe this DateTimeZone exists to encode a local time including a datetime. So I think that this change here might be inappropriate and is in fact introducing data corruption.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for pointing that out @TomFinley I will revert this change.

@TomFinleyTomFinley left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🕐


TimeSpan duration = DateTime.Now - startTime;
TimeSpan duration = DateTime.UtcNow - startTime;
ch.Info("Elapsed time for compression: {0}", duration);

@TomFinleyTomFinleyMay 11, 2018

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This in particular is a bit weird and doesn't really have an effect I'd think. Probably harmless though, plus UtcNow is much faster anyway so may as well use it.

Honestly this code here ought to have been using stopwatch. #Closed

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right, this has no effect. I have added a stopwatch here instead as per your suggestion

…t removed timezone info where it was actually needed
{
DateTime startTime = DateTime.Now;
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a quick note, not major: Stopwatch.StartNew() is made to serve this common case where you both want to create and start a stopwatch. (Not a blocking comment to be clear, only if you happen to post another iteration for some other reason anyway.)

@TomFinleyTomFinley left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@TomFinley
TomFinley merged commit 5d03b54 into dotnet:masterMay 12, 2018
@tarekgh

Copy link
Copy Markdown
Member

@KrzysztofCwalina

is that your understanding as well? I am under the impression that UtcNow would be faster and more reliable as Now will get time zone info.

Yes, DateTime,UtcNow is faster than DateTimeOffset.Now.

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

Thanks for working with me everyone. I hope to contribute more in the future.

@shauheen

Copy link
Copy Markdown
Contributor

Thanks @Sorrien for your contribution and working through this PR. We look forward to that as well.

eerhardt pushed a commit to eerhardt/machinelearning that referenced this pull request Jul 27, 2018
…stic (dotnet#133)
* Removed calls to DateTime.Now
The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic, except in cases where timezone info is actually needed. Also replaced one starttime measurement with stopwatch.
@ghostghost locked as resolved and limited conversation to collaborators Mar 30, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@Sorrien@dnfclas@TomFinley@Ivanidzo4ka@sharwell@shauheen@KrzysztofCwalina@tarekgh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Replaced calls to DateTime.Now with DateTime.UtcNow to be locale agnostic - #133

Merged
TomFinley merged 6 commits into
dotnet:masterfrom
Sorrien:master
May 12, 2018
Merged

Replaced calls to DateTime.Now with DateTime.UtcNow to be locale agnostic#133
TomFinley merged 6 commits into
dotnet:masterfrom
Sorrien:master

Conversation

@Sorrien

Copy link
Copy Markdown
Contributor

The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic.
Fixes#110

The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic.
@dnfclas

dnfclas commented May 11, 2018

Copy link
Copy Markdown

CLA assistant check
All CLA requirements met.

Ivanidzo4ka
Ivanidzo4ka previously approved these changes May 11, 2018

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@TomFinley

Copy link
Copy Markdown
Contributor

Thanks so much @Sorrien ! Just requesting @KrzysztofCwalina take a peek to see if it does what he intends. :)

@Ivanidzo4ka
Ivanidzo4ka dismissed their stale reviewMay 11, 2018 19:24

revoking review

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

https://github.com/dotnet/machinelearning/blob/master/src/Microsoft.ML.Core/Data/DateTime.cs#L204
I think that part need to be changed to dto.UtcDateTime as well.

@Ivanidzo4ka

Ivanidzo4ka commented May 11, 2018

Copy link
Copy Markdown
Contributor

Thank you @Sorrien


In reply to: 388462991 [](ancestors = 388462991)

Ivanidzo4ka
Ivanidzo4ka previously approved these changes May 11, 2018

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

Should I be concerned about the Windows_NT Release? If so, how can I learn more about what went wrong? It says access denied when I click "details."

@sharwell

Copy link
Copy Markdown
Contributor

❔ Is there any way to switch the code to using DateTimeOffset (which is comparable even in different time zones)?

@Ivanidzo4ka

Ivanidzo4ka commented May 11, 2018

Copy link
Copy Markdown
Contributor

We apparently have issue which related with random seed and amount of threads in our tests, so it's not problem on your side. I will open issue regarding that, meanwhile, best i can suggest is retrigger build by adding space somewhere.

Regression
.Microsoft.ML.Scenarios.ScenariosTests.TrainAndPredictIrisModelWithStringLabelTest (from MSTestSuite)

Последняя 1 сборка провалились (С Провалилось#588 )
Заняло 0.46 секунд.
добавить описание
Стек вызовов
MESSAGE:
Assert.Equal() Failure
Expected: 1 (rounded from 1)
Actual: 0.99 (rounded from 0.994781792163849)


In reply to: 388466866 [](ancestors = 388466866)

@shauheen

Copy link
Copy Markdown
Contributor

You can simply trigger the tests by asking the @dotnet-bot to test Windows_NT Release please as a comment.

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

@sharwell I am not as familiar with DateTimeOffset but I will look into it.

DateTime.UtcNow is now DateTimeOffset.Now.UtcDateTime
private LassoFit GetLassoFit(IChannel ch, int maxAllowedFeaturesPerModel)
{
DateTime startTime = DateTime.Now;
DateTime startTime = DateTimeOffset.Now.UtcDateTime;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DateTimeOffset.Now.UtcDateTime [](start = 33, length = 30)

Is there are any difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow? If no, why you prefer DateTimeOffset?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've done further research into DateTimeOffset. As I understand it, there is no difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow, but you could access more information from DateTimeOffset like the timezone which would be more useful for storing dates for later. As we are using it here I can't find a difference, so I will undo these changes.

@Ivanidzo4ka
Ivanidzo4ka dismissed their stale reviewMay 11, 2018 20:20

revoking review

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

As you can see in PR we mostly use DateTime.something to output time stamps and get ticks. To represent datetime internally as part of IDataView we use DvDateTime (see DateTime.cs) and we use DateTimeOffset in it.
So I'm not sure DateTimeOffset necessary for this PR


In reply to: 388467246 [](ancestors = 388467246)

@Sorrien

Sorrien commented May 11, 2018

Copy link
Copy Markdown
ContributorAuthor

I've done further research into DateTimeOffset. As I understand it, there is no difference between the result of DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow, but you could access more information from DateTimeOffset like the timezone which would be more useful for storing dates for later. As we are using it here I can't find a difference, so I will undo these changes.

@KrzysztofCwalina

KrzysztofCwalina commented May 11, 2018

Copy link
Copy Markdown
Member

I've done further research into DateTimeOffset. As I understand it, there is no difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow,

@tarekgh, is that your understanding as well? I am under the impression that UtcNow would be faster and more reliable as Now will get time zone info.

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@sharwell

sharwell commented May 11, 2018

Copy link
Copy Markdown
Contributor

As I understand it, there is no difference between the result of DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow

Ah, I was suggesting the use of DateTimeOffset.UtcNow instead of DateTime.UtcNow, and eliminating the use of DateTime altogether. DateTimeOffset is a type that does not suffer from the usage limitations leading to this pull request. If someone decides to use DateTimeOffset.Now and someone else uses DateTimeOffset.UtcNow, and a third person uses DateTimeOffset.Now from a different time zone than the first, everything will work together automatically.

var success = TryValidateOffset(dto.Offset.Ticks, out _offset);
Contracts.Assert(success);
_dateTime = ValidateDate(new DvDateTime(dto.DateTime), ref _offset);
_dateTime = ValidateDate(new DvDateTime(dto.UtcDateTime), ref _offset);

@TomFinleyTomFinleyMay 11, 2018

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

new DvDateTime(dto.UtcDateTime), ref _offset); [](start = 37, length = 46)

Interesting. I don't know that this is correct, singe this DateTimeZone exists to encode a local time including a datetime. So I think that this change here might be inappropriate and is in fact introducing data corruption.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for pointing that out @TomFinley I will revert this change.

@TomFinleyTomFinley left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🕐


TimeSpan duration = DateTime.Now - startTime;
TimeSpan duration = DateTime.UtcNow - startTime;
ch.Info("Elapsed time for compression: {0}", duration);

@TomFinleyTomFinleyMay 11, 2018

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This in particular is a bit weird and doesn't really have an effect I'd think. Probably harmless though, plus UtcNow is much faster anyway so may as well use it.

Honestly this code here ought to have been using stopwatch. #Closed

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right, this has no effect. I have added a stopwatch here instead as per your suggestion

…t removed timezone info where it was actually needed
{
DateTime startTime = DateTime.Now;
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a quick note, not major: Stopwatch.StartNew() is made to serve this common case where you both want to create and start a stopwatch. (Not a blocking comment to be clear, only if you happen to post another iteration for some other reason anyway.)

@TomFinleyTomFinley left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@TomFinley
TomFinley merged commit 5d03b54 into dotnet:masterMay 12, 2018
@tarekgh

Copy link
Copy Markdown
Member

@KrzysztofCwalina

is that your understanding as well? I am under the impression that UtcNow would be faster and more reliable as Now will get time zone info.

Yes, DateTime,UtcNow is faster than DateTimeOffset.Now.

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

Thanks for working with me everyone. I hope to contribute more in the future.

@shauheen

Copy link
Copy Markdown
Contributor

Thanks @Sorrien for your contribution and working through this PR. We look forward to that as well.

eerhardt pushed a commit to eerhardt/machinelearning that referenced this pull request Jul 27, 2018
…stic (dotnet#133)
* Removed calls to DateTime.Now
The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic, except in cases where timezone info is actually needed. Also replaced one starttime measurement with stopwatch.
@ghostghost locked as resolved and limited conversation to collaborators Mar 30, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@Sorrien@dnfclas@TomFinley@Ivanidzo4ka@sharwell@shauheen@KrzysztofCwalina@tarekgh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Replaced calls to DateTime.Now with DateTime.UtcNow to be locale agnostic - #133

Merged
TomFinley merged 6 commits into
dotnet:masterfrom
Sorrien:master
May 12, 2018
Merged

Replaced calls to DateTime.Now with DateTime.UtcNow to be locale agnostic#133
TomFinley merged 6 commits into
dotnet:masterfrom
Sorrien:master

Conversation

@Sorrien

Copy link
Copy Markdown
Contributor

The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic.
Fixes#110

The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic.
@dnfclas

dnfclas commented May 11, 2018

Copy link
Copy Markdown

CLA assistant check
All CLA requirements met.

Ivanidzo4ka
Ivanidzo4ka previously approved these changes May 11, 2018

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@TomFinley

Copy link
Copy Markdown
Contributor

Thanks so much @Sorrien ! Just requesting @KrzysztofCwalina take a peek to see if it does what he intends. :)

@Ivanidzo4ka
Ivanidzo4ka dismissed their stale reviewMay 11, 2018 19:24

revoking review

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

https://github.com/dotnet/machinelearning/blob/master/src/Microsoft.ML.Core/Data/DateTime.cs#L204
I think that part need to be changed to dto.UtcDateTime as well.

@Ivanidzo4ka

Ivanidzo4ka commented May 11, 2018

Copy link
Copy Markdown
Contributor

Thank you @Sorrien


In reply to: 388462991 [](ancestors = 388462991)

Ivanidzo4ka
Ivanidzo4ka previously approved these changes May 11, 2018

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

Should I be concerned about the Windows_NT Release? If so, how can I learn more about what went wrong? It says access denied when I click "details."

@sharwell

Copy link
Copy Markdown
Contributor

❔ Is there any way to switch the code to using DateTimeOffset (which is comparable even in different time zones)?

@Ivanidzo4ka

Ivanidzo4ka commented May 11, 2018

Copy link
Copy Markdown
Contributor

We apparently have issue which related with random seed and amount of threads in our tests, so it's not problem on your side. I will open issue regarding that, meanwhile, best i can suggest is retrigger build by adding space somewhere.

Regression
.Microsoft.ML.Scenarios.ScenariosTests.TrainAndPredictIrisModelWithStringLabelTest (from MSTestSuite)

Последняя 1 сборка провалились (С Провалилось#588 )
Заняло 0.46 секунд.
добавить описание
Стек вызовов
MESSAGE:
Assert.Equal() Failure
Expected: 1 (rounded from 1)
Actual: 0.99 (rounded from 0.994781792163849)


In reply to: 388466866 [](ancestors = 388466866)

@shauheen

Copy link
Copy Markdown
Contributor

You can simply trigger the tests by asking the @dotnet-bot to test Windows_NT Release please as a comment.

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

@sharwell I am not as familiar with DateTimeOffset but I will look into it.

DateTime.UtcNow is now DateTimeOffset.Now.UtcDateTime
private LassoFit GetLassoFit(IChannel ch, int maxAllowedFeaturesPerModel)
{
DateTime startTime = DateTime.Now;
DateTime startTime = DateTimeOffset.Now.UtcDateTime;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DateTimeOffset.Now.UtcDateTime [](start = 33, length = 30)

Is there are any difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow? If no, why you prefer DateTimeOffset?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've done further research into DateTimeOffset. As I understand it, there is no difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow, but you could access more information from DateTimeOffset like the timezone which would be more useful for storing dates for later. As we are using it here I can't find a difference, so I will undo these changes.

@Ivanidzo4ka
Ivanidzo4ka dismissed their stale reviewMay 11, 2018 20:20

revoking review

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

As you can see in PR we mostly use DateTime.something to output time stamps and get ticks. To represent datetime internally as part of IDataView we use DvDateTime (see DateTime.cs) and we use DateTimeOffset in it.
So I'm not sure DateTimeOffset necessary for this PR


In reply to: 388467246 [](ancestors = 388467246)

@Sorrien

Sorrien commented May 11, 2018

Copy link
Copy Markdown
ContributorAuthor

I've done further research into DateTimeOffset. As I understand it, there is no difference between the result of DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow, but you could access more information from DateTimeOffset like the timezone which would be more useful for storing dates for later. As we are using it here I can't find a difference, so I will undo these changes.

@KrzysztofCwalina

KrzysztofCwalina commented May 11, 2018

Copy link
Copy Markdown
Member

I've done further research into DateTimeOffset. As I understand it, there is no difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow,

@tarekgh, is that your understanding as well? I am under the impression that UtcNow would be faster and more reliable as Now will get time zone info.

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@sharwell

sharwell commented May 11, 2018

Copy link
Copy Markdown
Contributor

As I understand it, there is no difference between the result of DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow

Ah, I was suggesting the use of DateTimeOffset.UtcNow instead of DateTime.UtcNow, and eliminating the use of DateTime altogether. DateTimeOffset is a type that does not suffer from the usage limitations leading to this pull request. If someone decides to use DateTimeOffset.Now and someone else uses DateTimeOffset.UtcNow, and a third person uses DateTimeOffset.Now from a different time zone than the first, everything will work together automatically.

var success = TryValidateOffset(dto.Offset.Ticks, out _offset);
Contracts.Assert(success);
_dateTime = ValidateDate(new DvDateTime(dto.DateTime), ref _offset);
_dateTime = ValidateDate(new DvDateTime(dto.UtcDateTime), ref _offset);

@TomFinleyTomFinleyMay 11, 2018

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

new DvDateTime(dto.UtcDateTime), ref _offset); [](start = 37, length = 46)

Interesting. I don't know that this is correct, singe this DateTimeZone exists to encode a local time including a datetime. So I think that this change here might be inappropriate and is in fact introducing data corruption.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for pointing that out @TomFinley I will revert this change.

@TomFinleyTomFinley left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🕐


TimeSpan duration = DateTime.Now - startTime;
TimeSpan duration = DateTime.UtcNow - startTime;
ch.Info("Elapsed time for compression: {0}", duration);

@TomFinleyTomFinleyMay 11, 2018

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This in particular is a bit weird and doesn't really have an effect I'd think. Probably harmless though, plus UtcNow is much faster anyway so may as well use it.

Honestly this code here ought to have been using stopwatch. #Closed

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right, this has no effect. I have added a stopwatch here instead as per your suggestion

…t removed timezone info where it was actually needed
{
DateTime startTime = DateTime.Now;
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a quick note, not major: Stopwatch.StartNew() is made to serve this common case where you both want to create and start a stopwatch. (Not a blocking comment to be clear, only if you happen to post another iteration for some other reason anyway.)

@TomFinleyTomFinley left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@TomFinley
TomFinley merged commit 5d03b54 into dotnet:masterMay 12, 2018
@tarekgh

Copy link
Copy Markdown
Member

@KrzysztofCwalina

is that your understanding as well? I am under the impression that UtcNow would be faster and more reliable as Now will get time zone info.

Yes, DateTime,UtcNow is faster than DateTimeOffset.Now.

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

Thanks for working with me everyone. I hope to contribute more in the future.

@shauheen

Copy link
Copy Markdown
Contributor

Thanks @Sorrien for your contribution and working through this PR. We look forward to that as well.

eerhardt pushed a commit to eerhardt/machinelearning that referenced this pull request Jul 27, 2018
…stic (dotnet#133)
* Removed calls to DateTime.Now
The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic, except in cases where timezone info is actually needed. Also replaced one starttime measurement with stopwatch.
@ghostghost locked as resolved and limited conversation to collaborators Mar 30, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@Sorrien@dnfclas@TomFinley@Ivanidzo4ka@sharwell@shauheen@KrzysztofCwalina@tarekgh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Replaced calls to DateTime.Now with DateTime.UtcNow to be locale agnostic - #133

Merged
TomFinley merged 6 commits into
dotnet:masterfrom
Sorrien:master
May 12, 2018
Merged

Replaced calls to DateTime.Now with DateTime.UtcNow to be locale agnostic#133
TomFinley merged 6 commits into
dotnet:masterfrom
Sorrien:master

Conversation

@Sorrien

Copy link
Copy Markdown
Contributor

The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic.
Fixes#110

The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic.
@dnfclas

dnfclas commented May 11, 2018

Copy link
Copy Markdown

CLA assistant check
All CLA requirements met.

Ivanidzo4ka
Ivanidzo4ka previously approved these changes May 11, 2018

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@TomFinley

Copy link
Copy Markdown
Contributor

Thanks so much @Sorrien ! Just requesting @KrzysztofCwalina take a peek to see if it does what he intends. :)

@Ivanidzo4ka
Ivanidzo4ka dismissed their stale reviewMay 11, 2018 19:24

revoking review

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

https://github.com/dotnet/machinelearning/blob/master/src/Microsoft.ML.Core/Data/DateTime.cs#L204
I think that part need to be changed to dto.UtcDateTime as well.

@Ivanidzo4ka

Ivanidzo4ka commented May 11, 2018

Copy link
Copy Markdown
Contributor

Thank you @Sorrien


In reply to: 388462991 [](ancestors = 388462991)

Ivanidzo4ka
Ivanidzo4ka previously approved these changes May 11, 2018

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

Should I be concerned about the Windows_NT Release? If so, how can I learn more about what went wrong? It says access denied when I click "details."

@sharwell

Copy link
Copy Markdown
Contributor

❔ Is there any way to switch the code to using DateTimeOffset (which is comparable even in different time zones)?

@Ivanidzo4ka

Ivanidzo4ka commented May 11, 2018

Copy link
Copy Markdown
Contributor

We apparently have issue which related with random seed and amount of threads in our tests, so it's not problem on your side. I will open issue regarding that, meanwhile, best i can suggest is retrigger build by adding space somewhere.

Regression
.Microsoft.ML.Scenarios.ScenariosTests.TrainAndPredictIrisModelWithStringLabelTest (from MSTestSuite)

Последняя 1 сборка провалились (С Провалилось#588 )
Заняло 0.46 секунд.
добавить описание
Стек вызовов
MESSAGE:
Assert.Equal() Failure
Expected: 1 (rounded from 1)
Actual: 0.99 (rounded from 0.994781792163849)


In reply to: 388466866 [](ancestors = 388466866)

@shauheen

Copy link
Copy Markdown
Contributor

You can simply trigger the tests by asking the @dotnet-bot to test Windows_NT Release please as a comment.

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

@sharwell I am not as familiar with DateTimeOffset but I will look into it.

DateTime.UtcNow is now DateTimeOffset.Now.UtcDateTime
private LassoFit GetLassoFit(IChannel ch, int maxAllowedFeaturesPerModel)
{
DateTime startTime = DateTime.Now;
DateTime startTime = DateTimeOffset.Now.UtcDateTime;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DateTimeOffset.Now.UtcDateTime [](start = 33, length = 30)

Is there are any difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow? If no, why you prefer DateTimeOffset?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've done further research into DateTimeOffset. As I understand it, there is no difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow, but you could access more information from DateTimeOffset like the timezone which would be more useful for storing dates for later. As we are using it here I can't find a difference, so I will undo these changes.

@Ivanidzo4ka
Ivanidzo4ka dismissed their stale reviewMay 11, 2018 20:20

revoking review

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

As you can see in PR we mostly use DateTime.something to output time stamps and get ticks. To represent datetime internally as part of IDataView we use DvDateTime (see DateTime.cs) and we use DateTimeOffset in it.
So I'm not sure DateTimeOffset necessary for this PR


In reply to: 388467246 [](ancestors = 388467246)

@Sorrien

Sorrien commented May 11, 2018

Copy link
Copy Markdown
ContributorAuthor

I've done further research into DateTimeOffset. As I understand it, there is no difference between the result of DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow, but you could access more information from DateTimeOffset like the timezone which would be more useful for storing dates for later. As we are using it here I can't find a difference, so I will undo these changes.

@KrzysztofCwalina

KrzysztofCwalina commented May 11, 2018

Copy link
Copy Markdown
Member

I've done further research into DateTimeOffset. As I understand it, there is no difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow,

@tarekgh, is that your understanding as well? I am under the impression that UtcNow would be faster and more reliable as Now will get time zone info.

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@sharwell

sharwell commented May 11, 2018

Copy link
Copy Markdown
Contributor

As I understand it, there is no difference between the result of DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow

Ah, I was suggesting the use of DateTimeOffset.UtcNow instead of DateTime.UtcNow, and eliminating the use of DateTime altogether. DateTimeOffset is a type that does not suffer from the usage limitations leading to this pull request. If someone decides to use DateTimeOffset.Now and someone else uses DateTimeOffset.UtcNow, and a third person uses DateTimeOffset.Now from a different time zone than the first, everything will work together automatically.

var success = TryValidateOffset(dto.Offset.Ticks, out _offset);
Contracts.Assert(success);
_dateTime = ValidateDate(new DvDateTime(dto.DateTime), ref _offset);
_dateTime = ValidateDate(new DvDateTime(dto.UtcDateTime), ref _offset);

@TomFinleyTomFinleyMay 11, 2018

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

new DvDateTime(dto.UtcDateTime), ref _offset); [](start = 37, length = 46)

Interesting. I don't know that this is correct, singe this DateTimeZone exists to encode a local time including a datetime. So I think that this change here might be inappropriate and is in fact introducing data corruption.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for pointing that out @TomFinley I will revert this change.

@TomFinleyTomFinley left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🕐


TimeSpan duration = DateTime.Now - startTime;
TimeSpan duration = DateTime.UtcNow - startTime;
ch.Info("Elapsed time for compression: {0}", duration);

@TomFinleyTomFinleyMay 11, 2018

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This in particular is a bit weird and doesn't really have an effect I'd think. Probably harmless though, plus UtcNow is much faster anyway so may as well use it.

Honestly this code here ought to have been using stopwatch. #Closed

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right, this has no effect. I have added a stopwatch here instead as per your suggestion

…t removed timezone info where it was actually needed
{
DateTime startTime = DateTime.Now;
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a quick note, not major: Stopwatch.StartNew() is made to serve this common case where you both want to create and start a stopwatch. (Not a blocking comment to be clear, only if you happen to post another iteration for some other reason anyway.)

@TomFinleyTomFinley left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@TomFinley
TomFinley merged commit 5d03b54 into dotnet:masterMay 12, 2018
@tarekgh

Copy link
Copy Markdown
Member

@KrzysztofCwalina

is that your understanding as well? I am under the impression that UtcNow would be faster and more reliable as Now will get time zone info.

Yes, DateTime,UtcNow is faster than DateTimeOffset.Now.

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

Thanks for working with me everyone. I hope to contribute more in the future.

@shauheen

Copy link
Copy Markdown
Contributor

Thanks @Sorrien for your contribution and working through this PR. We look forward to that as well.

eerhardt pushed a commit to eerhardt/machinelearning that referenced this pull request Jul 27, 2018
…stic (dotnet#133)
* Removed calls to DateTime.Now
The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic, except in cases where timezone info is actually needed. Also replaced one starttime measurement with stopwatch.
@ghostghost locked as resolved and limited conversation to collaborators Mar 30, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@Sorrien@dnfclas@TomFinley@Ivanidzo4ka@sharwell@shauheen@KrzysztofCwalina@tarekgh
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Replaced calls to DateTime.Now with DateTime.UtcNow to be locale agnostic - #133

Merged
TomFinley merged 6 commits into
dotnet:masterfrom
Sorrien:master
May 12, 2018
Merged

Replaced calls to DateTime.Now with DateTime.UtcNow to be locale agnostic#133
TomFinley merged 6 commits into
dotnet:masterfrom
Sorrien:master

Conversation

@Sorrien

Copy link
Copy Markdown
Contributor

The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic.
Fixes#110

The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic.
@dnfclas

dnfclas commented May 11, 2018

Copy link
Copy Markdown

CLA assistant check
All CLA requirements met.

Ivanidzo4ka
Ivanidzo4ka previously approved these changes May 11, 2018

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@TomFinley

Copy link
Copy Markdown
Contributor

Thanks so much @Sorrien ! Just requesting @KrzysztofCwalina take a peek to see if it does what he intends. :)

@Ivanidzo4ka
Ivanidzo4ka dismissed their stale reviewMay 11, 2018 19:24

revoking review

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

https://github.com/dotnet/machinelearning/blob/master/src/Microsoft.ML.Core/Data/DateTime.cs#L204
I think that part need to be changed to dto.UtcDateTime as well.

@Ivanidzo4ka

Ivanidzo4ka commented May 11, 2018

Copy link
Copy Markdown
Contributor

Thank you @Sorrien


In reply to: 388462991 [](ancestors = 388462991)

Ivanidzo4ka
Ivanidzo4ka previously approved these changes May 11, 2018

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

Should I be concerned about the Windows_NT Release? If so, how can I learn more about what went wrong? It says access denied when I click "details."

@sharwell

Copy link
Copy Markdown
Contributor

❔ Is there any way to switch the code to using DateTimeOffset (which is comparable even in different time zones)?

@Ivanidzo4ka

Ivanidzo4ka commented May 11, 2018

Copy link
Copy Markdown
Contributor

We apparently have issue which related with random seed and amount of threads in our tests, so it's not problem on your side. I will open issue regarding that, meanwhile, best i can suggest is retrigger build by adding space somewhere.

Regression
.Microsoft.ML.Scenarios.ScenariosTests.TrainAndPredictIrisModelWithStringLabelTest (from MSTestSuite)

Последняя 1 сборка провалились (С Провалилось#588 )
Заняло 0.46 секунд.
добавить описание
Стек вызовов
MESSAGE:
Assert.Equal() Failure
Expected: 1 (rounded from 1)
Actual: 0.99 (rounded from 0.994781792163849)


In reply to: 388466866 [](ancestors = 388466866)

@shauheen

Copy link
Copy Markdown
Contributor

You can simply trigger the tests by asking the @dotnet-bot to test Windows_NT Release please as a comment.

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

@sharwell I am not as familiar with DateTimeOffset but I will look into it.

DateTime.UtcNow is now DateTimeOffset.Now.UtcDateTime
private LassoFit GetLassoFit(IChannel ch, int maxAllowedFeaturesPerModel)
{
DateTime startTime = DateTime.Now;
DateTime startTime = DateTimeOffset.Now.UtcDateTime;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DateTimeOffset.Now.UtcDateTime [](start = 33, length = 30)

Is there are any difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow? If no, why you prefer DateTimeOffset?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've done further research into DateTimeOffset. As I understand it, there is no difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow, but you could access more information from DateTimeOffset like the timezone which would be more useful for storing dates for later. As we are using it here I can't find a difference, so I will undo these changes.

@Ivanidzo4ka
Ivanidzo4ka dismissed their stale reviewMay 11, 2018 20:20

revoking review

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

As you can see in PR we mostly use DateTime.something to output time stamps and get ticks. To represent datetime internally as part of IDataView we use DvDateTime (see DateTime.cs) and we use DateTimeOffset in it.
So I'm not sure DateTimeOffset necessary for this PR


In reply to: 388467246 [](ancestors = 388467246)

@Sorrien

Sorrien commented May 11, 2018

Copy link
Copy Markdown
ContributorAuthor

I've done further research into DateTimeOffset. As I understand it, there is no difference between the result of DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow, but you could access more information from DateTimeOffset like the timezone which would be more useful for storing dates for later. As we are using it here I can't find a difference, so I will undo these changes.

@KrzysztofCwalina

KrzysztofCwalina commented May 11, 2018

Copy link
Copy Markdown
Member

I've done further research into DateTimeOffset. As I understand it, there is no difference between DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow,

@tarekgh, is that your understanding as well? I am under the impression that UtcNow would be faster and more reliable as Now will get time zone info.

@Ivanidzo4kaIvanidzo4ka left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@sharwell

sharwell commented May 11, 2018

Copy link
Copy Markdown
Contributor

As I understand it, there is no difference between the result of DateTimeOffset.Now.UtcDateTime and DateTime.UtcNow

Ah, I was suggesting the use of DateTimeOffset.UtcNow instead of DateTime.UtcNow, and eliminating the use of DateTime altogether. DateTimeOffset is a type that does not suffer from the usage limitations leading to this pull request. If someone decides to use DateTimeOffset.Now and someone else uses DateTimeOffset.UtcNow, and a third person uses DateTimeOffset.Now from a different time zone than the first, everything will work together automatically.

var success = TryValidateOffset(dto.Offset.Ticks, out _offset);
Contracts.Assert(success);
_dateTime = ValidateDate(new DvDateTime(dto.DateTime), ref _offset);
_dateTime = ValidateDate(new DvDateTime(dto.UtcDateTime), ref _offset);

@TomFinleyTomFinleyMay 11, 2018

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

new DvDateTime(dto.UtcDateTime), ref _offset); [](start = 37, length = 46)

Interesting. I don't know that this is correct, singe this DateTimeZone exists to encode a local time including a datetime. So I think that this change here might be inappropriate and is in fact introducing data corruption.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for pointing that out @TomFinley I will revert this change.

@TomFinleyTomFinley left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🕐


TimeSpan duration = DateTime.Now - startTime;
TimeSpan duration = DateTime.UtcNow - startTime;
ch.Info("Elapsed time for compression: {0}", duration);

@TomFinleyTomFinleyMay 11, 2018

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This in particular is a bit weird and doesn't really have an effect I'd think. Probably harmless though, plus UtcNow is much faster anyway so may as well use it.

Honestly this code here ought to have been using stopwatch. #Closed

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right, this has no effect. I have added a stopwatch here instead as per your suggestion

…t removed timezone info where it was actually needed
{
DateTime startTime = DateTime.Now;
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a quick note, not major: Stopwatch.StartNew() is made to serve this common case where you both want to create and start a stopwatch. (Not a blocking comment to be clear, only if you happen to post another iteration for some other reason anyway.)

@TomFinleyTomFinley left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@TomFinley
TomFinley merged commit 5d03b54 into dotnet:masterMay 12, 2018
@tarekgh

Copy link
Copy Markdown
Member

@KrzysztofCwalina

is that your understanding as well? I am under the impression that UtcNow would be faster and more reliable as Now will get time zone info.

Yes, DateTime,UtcNow is faster than DateTimeOffset.Now.

@Sorrien

Copy link
Copy Markdown
ContributorAuthor

Thanks for working with me everyone. I hope to contribute more in the future.

@shauheen

Copy link
Copy Markdown
Contributor

Thanks @Sorrien for your contribution and working through this PR. We look forward to that as well.

eerhardt pushed a commit to eerhardt/machinelearning that referenced this pull request Jul 27, 2018
…stic (dotnet#133)
* Removed calls to DateTime.Now
The codebase now uses DateTime.UtcNow, instead of DateTime.Now, to be locale agnostic, except in cases where timezone info is actually needed. Also replaced one starttime measurement with stopwatch.
@ghostghost locked as resolved and limited conversation to collaborators Mar 30, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@Sorrien@dnfclas@TomFinley@Ivanidzo4ka@sharwell@shauheen@KrzysztofCwalina@tarekgh