сравнение даты и времени, позволяющее продолжить поток, когда не должно

Через ~ 7 лет я обновлю его на лучший подход, предложенный Божо.

new File("/path/directory").mkdirs();

Устаревший:

File theDir = new File("new folder");

// if the directory does not exist, create it
if (!theDir.exists()) {
    System.out.println("creating directory: " + theDir.getName());
    boolean result = false;

    try{
        theDir.mkdir();
        result = true;
    } 
    catch(SecurityException se){
        //handle it
    }        
    if(result) {    
        System.out.println("DIR created");  
    }
}
1
задан Michele 17 January 2019 в 15:06
поделиться

1 ответ

Перечитывая ваше последнее предложение, я теперь вижу, что ваше намерение состоит в том, чтобы игнорировать времена, а не включать их в ваше сравнение.

Вы вправе использовать [DateTime] объекты при сравнении, но учтите, что эти объекты всегда содержат время.

Удобно, что вы можете использовать свойство .Date такого объекта, который возвращает новый объект со временем, установленным в полночь. Это полезно для сравнения, потому что время больше не будет фактором.

Вытащив мое измененное утверждение if снизу, вы можете сделать это так:

if ($dirDate.Date -lt $lastSaturday.Date -and $dirDate.Date -ge $weekAgoSunday.Date) {
    # do stuff
}

Теперь вы сравниваете только даты и игнорируете время!


[1123 На основании того, что вы показываете, похоже, что оператор if работает, как ожидалось. Подводя итог, вы говорите, что:

$dateTimeObjectFromRegex это Saturday, January 12, 2019 12:00:00 PM

$lastSaturday это Saturday, January 12, 2019 3:59:04 PM

$weekAgoSunday это Sunday, January 6, 2019 12:00:00 AM

[ 1127] Условным условием является:

if(([datetime]$dateTimeObjectFromRegex -lt [datetime]$lastSaturday) 
-and ([datetime]$dateTimeObjectFromRegex -ge [datetime]$weekAgoSunday))

Поэтому в псевдокоде это:

if (
    ("January 12, 2019 12:00:00 PM" is earlier than "January 12, 2019 3:59:04 PM") # true
    and
    ("January 12, 2019 12:00:00 PM" is later or the same as "January 6, 2019 12:00:00 AM") # true
) # true

Я хочу отметить, что вы делаете очень много ненужных обрезки и приведения даты и времени. и очистка этого поможет с удобочитаемостью и отладкой этих типов проблем.

$lastSaturday = GetLastSaturdayDate
$lastSaturday = [datetime]$lastSaturday
$weekAgoSunday = GetWeekAgoSundayDate
$weekAgoSunday = [datetime]$weekAgoSunday

Ваши функции уже возвращают [DateTime] объекты, поэтому нет необходимости в этих приведениях.


      $temp = 

Перечитывая ваше последнее предложение, я теперь вижу, что ваше намерение состоит в том, чтобы игнорировать времена, а не включать их в ваше сравнение.

Вы вправе использовать [DateTime] объекты при сравнении, но учтите, что эти объекты всегда содержат время.

Удобно, что вы можете использовать свойство .Date такого объекта, который возвращает новый объект со временем, установленным в полночь. Это полезно для сравнения, потому что время больше не будет фактором.

Вытащив мое измененное утверждение if снизу, вы можете сделать это так:

[110]

Теперь вы сравниваете только даты и игнорируете время!


[1123 На основании того, что вы показываете, похоже, что оператор if работает, как ожидалось. Подводя итог, вы говорите, что:

$dateTimeObjectFromRegex это Saturday, January 12, 2019 12:00:00 PM

$lastSaturday это Saturday, January 12, 2019 3:59:04 PM

$weekAgoSunday это Sunday, January 6, 2019 12:00:00 AM

[ 1127] Условным условием является:

[111]

Поэтому в псевдокоде это:

[112]

Я хочу отметить, что вы делаете очень много ненужных обрезки и приведения даты и времени. и очистка этого поможет с удобочитаемостью и отладкой этих типов проблем.

[113]

Ваши функции уже возвращают [DateTime] объекты, поэтому нет необходимости в этих приведениях.


[114]

Это довольно сложно, вы можете упростить его до чего-то вроде этого:

if (

Перечитывая ваше последнее предложение, я теперь вижу, что ваше намерение состоит в том, чтобы игнорировать времена, а не включать их в ваше сравнение.

Вы вправе использовать [DateTime] объекты при сравнении, но учтите, что эти объекты всегда содержат время.

Удобно, что вы можете использовать свойство .Date такого объекта, который возвращает новый объект со временем, установленным в полночь. Это полезно для сравнения, потому что время больше не будет фактором.

Вытащив мое измененное утверждение if снизу, вы можете сделать это так:

[110]

Теперь вы сравниваете только даты и игнорируете время!


[1123 На основании того, что вы показываете, похоже, что оператор if работает, как ожидалось. Подводя итог, вы говорите, что:

$dateTimeObjectFromRegex это Saturday, January 12, 2019 12:00:00 PM

$lastSaturday это Saturday, January 12, 2019 3:59:04 PM

$weekAgoSunday это Sunday, January 6, 2019 12:00:00 AM

[ 1127] Условным условием является:

[111]

Поэтому в псевдокоде это:

[112]

Я хочу отметить, что вы делаете очень много ненужных обрезки и приведения даты и времени. и очистка этого поможет с удобочитаемостью и отладкой этих типов проблем.

[113]

Ваши функции уже возвращают [DateTime] объекты, поэтому нет необходимости в этих приведениях.


[114]

Это довольно сложно, вы можете упростить его до чего-то вроде этого:

[115]

Возможно, еще несколько оптимизаций и т. д. Надеюсь, это было полезно!

.Name -match '(\d{4}-\d{2}-\d{2})

Возможно, еще несколько оптимизаций и т. д. Надеюсь, это было полезно!

) { # in here, you know the match was successful $dirDate = Get-Date $Matches[1] # double check this, might need .Groups or something if ($dirDate -lt $lastSaturday -and $dirDate -ge $weekAgoSunday) { # do stuff } }

Возможно, еще несколько оптимизаций и т. д. Надеюсь, это было полезно!

$regex = [regex]::Matches($temp,'([0-9]+)-([0-9]+)-([0-9]+)') if($regex.length -gt 0) #it matched { $year = $regex[0].Groups[1].Value $month = $regex[0].Groups[2].Value $day = $regex[0].Groups[3].Value write-output $year write-output $month write-output $day write-output "*************" $dirDate = $regex[0].Groups[0].Value + " 12:00:00 PM" write-output $dirDate

Это довольно сложно, вы можете упростить его до чего-то вроде этого:

if (

Перечитывая ваше последнее предложение, я теперь вижу, что ваше намерение состоит в том, чтобы игнорировать времена, а не включать их в ваше сравнение.

Вы вправе использовать [DateTime] объекты при сравнении, но учтите, что эти объекты всегда содержат время.

Удобно, что вы можете использовать свойство .Date такого объекта, который возвращает новый объект со временем, установленным в полночь. Это полезно для сравнения, потому что время больше не будет фактором.

Вытащив мое измененное утверждение if снизу, вы можете сделать это так:

[110]

Теперь вы сравниваете только даты и игнорируете время!


[1123 На основании того, что вы показываете, похоже, что оператор if работает, как ожидалось. Подводя итог, вы говорите, что:

$dateTimeObjectFromRegex это Saturday, January 12, 2019 12:00:00 PM

$lastSaturday это Saturday, January 12, 2019 3:59:04 PM

$weekAgoSunday это Sunday, January 6, 2019 12:00:00 AM

[ 1127] Условным условием является:

[111]

Поэтому в псевдокоде это:

[112]

Я хочу отметить, что вы делаете очень много ненужных обрезки и приведения даты и времени. и очистка этого поможет с удобочитаемостью и отладкой этих типов проблем.

[113]

Ваши функции уже возвращают [DateTime] объекты, поэтому нет необходимости в этих приведениях.


[114]

Это довольно сложно, вы можете упростить его до чего-то вроде этого:

[115]

Возможно, еще несколько оптимизаций и т. д. Надеюсь, это было полезно!

.Name -match '(\d{4}-\d{2}-\d{2})

Возможно, еще несколько оптимизаций и т. д. Надеюсь, это было полезно!

) { # in here, you know the match was successful $dirDate = Get-Date $Matches[1] # double check this, might need .Groups or something if ($dirDate -lt $lastSaturday -and $dirDate -ge $weekAgoSunday) { # do stuff } }

Возможно, еще несколько оптимизаций и т. д. Надеюсь, это было полезно!

0
ответ дан briantist 17 January 2019 в 15:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: