Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
Solved

# Find position in array?

Posted on 2008-06-17
Medium Priority
1,102 Views
I have a question... Not really sure this is the way to do it, so i am open to any other suggestions..

I want to split a 24 hour day up into 2 hour periods... I want to then look at the current hour and get the period this hour fits into.

So i built an array:

int[] HourPeriods = new int[12] { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24 };

And can get the current hour, and loop through the hour periods...

foreach (int hr in HourPeriods)
{
//DateTime.Now.Hour;
}

But how to i do this? Say if the hour is 15 how do i get the 16 period from the array???

Nugs
0
Question by:Nugs
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points

LVL 18

Expert Comment

ID: 21807813
I think you're making it harder than it has to be:
int PeriodIndex = DateTime.Now.Hour / 2;
0

LVL 15

Assisted Solution

Solar_Flare earned 400 total points
ID: 21807821
well you can test the DateTime.Now.Hour against the int

foreach (int hr in HourPeriods)
{
if (DateTime.Now.Hour < hr && DateTime.Now.Hour > (int-2))
{
//datetime.now.hour is less than 2 hours before int hr
}
}
0

LVL 2

Author Comment

ID: 21808058
jcoehoorn: I think you are right that i am making it more complex than it need be. Unfortunatley your example is way off from what i am looking for.

Solar_Flare: Just by looking at your example i could see it would work. But after much consideration and jcoehoorn comment i decided it was to complicated for what needed to be done...

What do you guys think of the attached code...

Since it is the hours i am looking at these number will always be between 1 and 24... Say i run the code now at 3pm (15 hr) this will increment it to 16 hundred hour...

Nugs

``````        int HourPeriodIndex = 1;
if (DateTime.Now.Hour % 2 != 0)
{
HourPeriodIndex = DateTime.Now.Hour + 1;
}
else
{
HourPeriodIndex = DateTime.Now.Hour;
}
``````
0

LVL 18

Expert Comment

ID: 21808820
Try this:
0

LVL 18

Accepted Solution

Joel Coehoorn earned 1200 total points
ID: 21808829
Ah! It lost my code snippet!  This should work because the interger division will truncate any decimal before multiplying by 2 again:
``````int HourPeriod = ( DateTime.Now.Hour / 2 ) * 2;
``````
0

LVL 11

Assisted Solution

Mihai Stancescu earned 400 total points
ID: 21819522
You can try this:

Hope this helps!

Regard,
Mishu
``````ArrayList HourPeriods = new ArrayList(new int[12] { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24 });

int hour = DateTime.Now.Hour;
int theIndex = -1;
try
{
if (HourPeriods.Contains(hour))
{
theIndex = HourPeriods.IndexOf(hour);
}
}
catch (Exception)
{
theIndex = HourPeriods.IndexOf(hour + 1);
}
``````
0

LVL 2

Author Closing Comment

ID: 31468160
Thanks everyone. I eventually opted for jcoehoorn simpler solution here, but none of the solutions posted were wrong by any means so i split the points... Thanks for all the input.
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article describes a simple method to resize a control at runtime.  It includes ready-to-use source code and a complete sample demonstration application.  We'll also talk about C# Extension Methods. Introduction In one of my applications…
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…
Sometimes it takes a new vantage point, apart from our everyday security practices, to truly see our Active Directory (AD) vulnerabilities. We get used to implementing the same techniques and checking the same areas for a breach. This pattern can re…
###### Suggested Courses
Course of the Month11 days, 10 hours left to enroll