Solved

Find position in array?

Posted on 2008-06-17
7
1,098 Views
Last Modified: 2012-05-05
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
Comment
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
  • Learn & ask questions
7 Comments
 
LVL 18

Expert Comment

by:jcoehoorn
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

by:Solar_Flare
Solar_Flare earned 100 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

by:Nugs
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;
        }

Open in new window

0
Revamp Your Training Process

Drastically shorten your training time with WalkMe's advanced online training solution that Guides your trainees to action.

 
LVL 18

Expert Comment

by:jcoehoorn
ID: 21808820
Try this:
0
 
LVL 18

Accepted Solution

by:
jcoehoorn earned 300 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;

Open in new window

0
 
LVL 11

Assisted Solution

by:Mihai Stancescu
Mihai Stancescu earned 100 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);
            }

Open in new window

0
 
LVL 2

Author Closing Comment

by:Nugs
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

Enroll in May's Course of the Month

May’s Course of the Month is now available! Experts Exchange’s Premium Members and Team Accounts have access to a complimentary course each month as part of their membership—an extra way to increase training and boost professional development.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
C# Formatting DateTime String Value 5 66
Upgrade code from VS 2010 to VS 2015 7 45
Coding for the first time 9 96
GET INFO ABOUT WHAT THE PRINTER IS DOING ? 11 69
Article by: Najam
Having new technologies does not mean they will completely replace old components.  Recently I had to create WCF that will be called by VB6 component.  Here I will describe what steps one should follow while doing so, please feel free to post any qu…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…

738 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question